=-=逆向考虑下就好了,糟糕的题面啊!!最近怎么老是被我碰到啊

#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;
}