zoukankan      html  css  js  c++  java
  • 牛客 糖糖别胡说,我真的不是签到题目(思维+差分)

    首先如果一个糖糖被消灭,那么一定是后面的不同组的糖糖的最大值比他要大

    因此我们只需要倒着求最大值就行了

    问题是发功的解法,发功其实就是给1-ci的数加上1,因此只要先把发功的影响算出来,加到原数组上就可以

    因为比如在3处发功,1-3都会+1,所以对相对关系没有影响。只有在3前面的发功才会对3和1的关系产生影响,所以只需要求出最终答案后比大小即可。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int a[N],b[N];
    int s[N];
    int main(){
        int t;
        ios::sync_with_stdio(false);
        cin>>t;
        while(t--){
            memset(s,0,sizeof s);
            int n,m;
            cin>>n>>m;
            int i;
            for(i=1;i<=n;i++){
                cin>>a[i]>>b[i];
            }
            for(i=1;i<=m;i++){
                int x;
                cin>>x;
                s[1]+=1;
                s[x+1]-=1;
            }
            for(i=1;i<=n;i++)
                s[i]+=s[i-1];
            for(i=1;i<=n;i++)
                b[i]+=s[i];
            int max1=0,max2=0;
            if(a[n]==1)
                max1=b[n];
            else
                max2=b[n];
            int res=0;
            for(i=n-1;i>=1;i--){
                if(a[i]==1){
                    if(b[i]<max2)
                        res++;
                    max1=max(max1,b[i]);
                }
                else{
                    if(b[i]<max1)
                        res++;
                    max2=max(max2,b[i]);
                }
            }
            cout<<n-res<<endl;
        }
    }
    View Code
  • 相关阅读:
    雨中梦游
    最后一次为你哭
    poj3169 Layout
    poj2253 Frogger
    钟爱一生
    POJ2668解题报告
    魅力泸西
    android学习笔记09(activity的生命周期)
    poj 3468 A Simple Problem with Integers
    android学习笔记之多线程(二)
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12882401.html
Copyright © 2011-2022 走看看