牛客枚举暴力题---糖糖别胡说,我真的不是签到题目

糖糖别胡说,我真的不是签到题目

  • 先假设所有人都不会被消灭,求出第n秒的所有人的战力
  • 从后往前遍历,分别记录两个队的战力最大值,如果第i个人的战力小于后面另一个队的最大战力值,则一定会被消灭
    这个是那个大佬的链接
#include<bits/stdc++.h>

using namespace std;

#define maxn 50005
#define mm(a,x) memset(a,x,sizeof(a))
#define ll long long 

struct Node{
    int x;
    ll y;
}a[maxn];
ll b[maxn];
int main(){
    int t,n,m,x;
    cin>>t;
    while(t--){
        mm(b,0);
        cin>>n>>m;
        for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
        for(int i=1;i<=m;i++) cin>>x,b[x]++;
        for(int i=n;i>=1;i--) b[i]+=b[i+1],a[i].y+=b[i];
       int cnt=0;
        ll max0=0,max1=0;
        for(int i=n;i>=1;i--){
            if(a[i].x==0){
                max0=max(max0,a[i].y);
                if(max1>a[i].y) cnt++;
            }else{
                max1=max(max1,a[i].y);
                if(max0>a[i].y) cnt++;
            }
        }
        cout<<n-cnt<<"\n";
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/bingers/p/13166486.html