糖糖别胡说,我真的不是签到题目
- 先假设所有人都不会被消灭,求出第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;
}