51nod 扔盘子

Posted 友人A

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 扔盘子相关的知识,希望对你有一定的参考价值。

题目传送门

这道题一开始写了n方的算法 果不其然 它T了

所以就想想o(n)的算法 写不出来 就像sbzhq学习了一下

这道题啊 要维护一下从深度1到n每一段的最小值以及他的位置 然后就暴力搞一搞就okay 啦!!!

技术分享
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=1e9+7;
int read(){
    int ans=0,f=1,c=getchar();
    while(c<0||c>9){if(c==-) f=-1; c=getchar();}
    while(c>=0&&c<=9){ans=ans*10+(c-0); c=getchar();}
    return ans*f;
}
int n,m,head=1,top,ans;
int s[50007],a[50007],sum[50007],mn[50007];
int main(){
    n=read(); m=read(); top=n;
    sum[0]=inf; mn[0]=0;
    for(int i=1;i<=n;i++){
        s[i]=read();
        sum[i]=sum[i-1]; mn[i]=mn[i-1];
        if(s[i]<=sum[i]) sum[i]=s[i],mn[i]=i;
    }
    for(int i=1;i<=m;i++) a[i]=read();
    while(top&&head<=m){
        if(sum[top]>=a[head]) ans++,head++,top--;
        else top=mn[top]-1;
    }
    printf("%d\n",ans);
    return 0;
}
View Code

 

以上是关于51nod 扔盘子的主要内容,如果未能解决你的问题,请参考以下文章

(贪心)51NOD 1279 扔盘子

51nod 1279单调栈扔盘子

51NOD 1279 扔盘子(二分 + 思维)

51nod 1279 扔盘子

51nod 扔盘子

51nod 1279 单调栈