=-=逆向考虑下就好了,糟糕的题面啊!!最近怎么老是被我碰到啊
#include <bits/stdc++.h> const int N=5e4+50,M=1e6+5; int Time[N]; struct Mn{ int x;long long y; }a[N]; int main() { int T; for(std::cin>>T;T;T--) { int n,m;std::cin>>n>>m; for(int i=1;i<=n;i++) { scanf("%d%lld",&a[i].x,&a[i].y); Time[i]=0; } for(int i=1;i<=m;i++) { int x;scanf("%d",&x);Time[x]++; } for(int i=n;i;i--) Time[i]+=Time[i+1],a[i].y+=Time[i]; int ans=n;long long maxa=0,maxb=0; for(int i=n;i;i--) { if(a[i].x==0) { maxa=std::max(maxa,a[i].y); if(maxb>a[i].y) ans--; } else { maxb=std::max(maxb,a[i].y); if(maxa>a[i].y) ans--; } }printf("%d\n",ans); } return 0; }