CF D 求调
  • 板块学术版
  • 楼主Yhy001
  • 当前回复6
  • 已保存回复7
  • 发布时间2024/10/20 00:26
  • 上次更新2024/10/20 10:37:05
查看原帖
CF D 求调
722054
Yhy001楼主2024/10/20 00:26
#include <bits/stdc++.h>
using namespace std;
int a[200005],vis[200005],c[200005],d[200005];
int main(){
    int t;cin>>t;
    while(t--){
        int n,q,cnt=0;cin>>n>>q;
        for(int i=1;i<=n;i++) cin>>a[i],vis[min(a[i],i)+1]++,vis[max(a[i],i)+1]--;
        for(int i=1;i<=n;i++) vis[i]+=vis[i-1];
        string s;cin>>s,s=' '+s;
        for(int i=1;i<=n;i++) if(s[i]=='L') c[i]=1;
        for(int i=1;i<=n;i++){
            d[i]=c[i]-c[i-1];
            if(d[i]==-1&&vis[i]) cnt++;
        }
        while(q--){
            int x;cin>>x;
            if(c[x]){
                d[x]--,d[x+1]++;
                if(d[x]==-1&&vis[x]) cnt++;
                if(!d[x+1]&&vis[x+1]) cnt--;
            }else{
                d[x]++,d[x+1]--;
                if(!d[x]&&vis[x]) cnt--;
                if(d[x+1]==-1&&vis[x+1]) cnt++;
            }
            cout<<(cnt?"No\n":"Yes\n");
        }
        for(int i=1;i<=n+1;i++) vis[i]=c[i]=d[i]=0;
    }
}
2024/10/20 00:26
加载中...