QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#586086#9263. Rebellious Sequencesucup-team3474WA 2ms5820kbC++203.8kb2024-09-24 01:57:112024-09-24 01:57:12

Judging History

This is the latest submission verdict.

  • [2024-09-24 01:57:12]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 5820kb
  • [2024-09-24 01:57:11]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
const int N=1919810;
typedef long long ll;
typedef pair<ll,ll> PII;
ll n,m,k;
ll a[N],b[N];
char s[N];
int val[N];

vector<char> e[N];
int ss[N];

typedef struct{
    int l,r;
    int cnt0,cnt1;
    int mn;
    int tag;
}Node;

Node tr[N];

void pushup(int u){
    tr[u].cnt0=tr[u<<1].cnt0+tr[u<<1|1].cnt0;
    tr[u].cnt1=tr[u<<1].cnt1+tr[u<<1|1].cnt1;
    tr[u].mn=min(tr[u<<1].mn,tr[u<<1|1].mn);
}

void pushdown(int u){
    if(tr[u].tag){
        tr[u<<1].mn+=tr[u].tag,tr[u<<1].tag+=tr[u].tag;
        tr[u<<1|1].mn+=tr[u].tag,tr[u<<1|1].tag+=tr[u].tag;
        tr[u].tag=0;
    }
}



void build(int u,int l,int r){
    tr[u].l=l,tr[u].r=r;
    if(l==r){
        if(s[l]=='(') tr[u].cnt0=1;
        else tr[u].cnt1=1;
        tr[u].mn=ss[l];
    }else{
        int mid=l+r>>1;
        build(u<<1,l,mid);
        build(u<<1|1,mid+1,r);
        pushup(u);
    }
}

void modify(int u,int l,int r,int type,int c){
    // cout<<u<<endl;
    if(l>r) return;
    if(tr[u].l>=l&&tr[u].r<=r){
        if(type==0){
            tr[u].cnt0^=1;
            tr[u].cnt1^=1;
        }else{
            tr[u].mn+=c;
            tr[u].tag+=c;
        }
    }else{
        int mid=tr[u].l+tr[u].r>>1;
        pushdown(u);
        if(l<=mid) modify(u<<1,l,r,type,c);
        if(r>mid) modify(u<<1|1,l,r,type,c);
        pushup(u);
    }
}

Node merge(Node a,Node b){
    a.cnt0+=b.cnt0;
    a.cnt1+=b.cnt1;
    a.mn=min(a.mn,b.mn);
    // cout<<a.cnt0<<" "<<b.cnt0<<" "<<a.cnt1<<" "<<b.cnt1<<" "<<a.mn<<" "<<b.mn<<endl;
    return a;
}

Node query(int u,int l,int r){
    // cout<<"-"<<u<<" "<<l<<" "<<r<<endl;
    if(tr[u].l>=l&&tr[u].r<=r){
        // cout<<tr[u].cnt0<<endl;

        return tr[u];
    }else{
        int mid=tr[u].l+tr[u].r>>1;
        pushdown(u);
        Node nd={0,0,0,0,1000000000,0};
        if(l<=mid) nd=merge(nd,query(u<<1,l,r));
        if(r>mid) nd=merge(nd,query(u<<1|1,l,r));
        pushup(u);
        // cout<<"--"<<nd.cnt0<<" "<<nd.cnt1<<" "<<nd.mn<<endl;
        return nd;
    }
}

bool check(){
    int le,ri;
    int l=1,r=n;
    while(l<r){
        int mid=l+r>>1;
        if(query(1,1,mid).cnt1==0) l=mid+1;
        else r=mid;
    }
    le=l+1;
    l=le,r=n;
    while(l<r){
        int mid=l+r>>1;
        if(query(1,le,mid).cnt0==0) l=mid+1;
        else r=mid;
    }
    le=l;
    l=1,r=n;
    while(l<r){
        int mid=l+r+1>>1;
        if(query(1,mid,n).cnt0==0) r=mid-1;
        else l=mid;
    }
    ri=l-1;
    l=1,r=ri;
    // cout<<ri<<endl;
    while(l<r){
        int mid=l+r+1>>1;
        if(query(1,mid,ri).cnt1==0) r=mid-1;
        else l=mid;
    }
    ri=l;
    // cout<<le<<" "<<ri<<endl;
    if(le+1<=ri-1&&query(1,le+1,ri-1).mn==0) return true;
    else return false;
}


void __(){
    cin>>n>>m;
    scanf("%s",s+1);
    for(int i=1;i<=n;i++){
        if(s[i]=='(') ss[i]=1;
        else ss[i]=-1;
        ss[i]+=ss[i-1];
    }
    
    build(1,1,n);
    // for(int i=1;i<=n;i++){
    //         cout<<query(1,i,i).cnt0<<" "<<query(1,i,i).cnt1<<" "<<query(1,i,i).mn<<endl;
    //     }
    // cout<<114514<<endl;
    while(m--){
        int l,r;
        scanf("%d%d",&l,&r);
        if(s[l]!=s[r]){
            modify(1,l,l,0,0);
            modify(1,r,r,0,0);
            if(s[l]=='(') modify(1,l,r-1,1,-2);
            else modify(1,l,r-1,1,2);
        }
        
        swap(s[l],s[r]);
        // for(int i=1;i<=n;i++){
        //     cout<<query(1,i,i).cnt0<<" "<<query(1,i,i).cnt1<<" "<<query(1,i,i).mn<<endl;
        // }
        // printf("%s\n",s+1);
        
        if(!check()) puts("No");
        else puts("Yes");
    }
}


int main(){
    int _=1;
    // cin>>_;
    while(_--){
        __();
    }
}

詳細信息

Test #1:

score: 100
Accepted
time: 2ms
memory: 5820kb

input:

8 4
(()()())
3 4
5 6
2 7
6 7

output:

No
No
Yes
No

result:

ok 4 token(s): yes count is 1, no count is 3

Test #2:

score: 0
Accepted
time: 2ms
memory: 5656kb

input:

6 6
((()))
2 4
2 4
2 5
4 5
4 5
2 3

output:

No
No
No
No
No
No

result:

ok 6 token(s): yes count is 0, no count is 6

Test #3:

score: -100
Wrong Answer
time: 2ms
memory: 5724kb

input:

10 10
((())(()))
7 9
2 4
5 6
8 9
2 8
5 9
2 5
2 3
3 9
3 8

output:

No
No
No
No
No
No
No
No
No
No

result:

wrong answer expected YES, found NO [2nd token]