QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#586099#9263. Rebellious SequencesshstyleTL 3171ms20872kbC++233.9kb2024-09-24 02:35:002024-09-24 02:35:02

Judging History

This is the latest submission verdict.

  • [2024-09-24 02:35:02]
  • Judged
  • Verdict: TL
  • Time: 3171ms
  • Memory: 20872kb
  • [2024-09-24 02:35:00]
  • 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) return false;
    else{
    Node nd=query(1,le+1,ri-1);
int num1=query(1,le,le).mn,num2=query(1,ri,ri).mn;
if(nd.cnt1>=num1&&nd.cnt0>=num2) return true;
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(_--){
        __();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 7724kb

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: 5824kb

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: 0
Accepted
time: 2ms
memory: 5876kb

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
Yes
Yes
Yes
No
No
Yes
Yes
No
No

result:

ok 10 token(s): yes count is 5, no count is 5

Test #4:

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

input:

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

output:

No
No
No
No
Yes
No
Yes
Yes
No
No
No
No
Yes
Yes
No
Yes
No
No
No
No
No
No
No
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
Yes
No
No
No
No
No
No
No
No
Yes
Yes
No
No
No
No
No
No
No
No
Yes
No
Yes
No
No
No
No
No
No
No
Yes
Yes
Yes
No
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
No
No
No
Yes
Yes
No
No...

result:

ok 100 token(s): yes count is 38, no count is 62

Test #5:

score: 0
Accepted
time: 3ms
memory: 5816kb

input:

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

output:

Yes
No
No
No
No
Yes
No
No
No
No
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
No
No
Yes
Yes
No
No
No
Yes
No
No
No
No
No
No
No
No
No
No
Yes
Yes
No
No
Yes
No
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
Yes
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
Yes
No
No
No
No
No
No
No
No
No
Yes
No
No
Y...

result:

ok 1000 token(s): yes count is 354, no count is 646

Test #6:

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

input:

50 50
((()(()((((((((()(())())(()(()()())))()())))))))))
11 34
31 47
13 48
25 30
8 20
24 29
19 44
7 38
18 37
13 15
14 18
27 37
6 25
45 47
31 48
9 43
30 42
36 42
36 42
30 44
43 48
21 24
21 43
3 4
8 45
43 45
5 47
17 45
22 38
29 48
15 29
5 38
29 30
16 46
21 33
8 14
17 36
20 35
32 46
21 23
3 32
10 38
31...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes

result:

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

Test #7:

score: 0
Accepted
time: 4ms
memory: 5872kb

input:

100 1000
((()()(((())())(())())(()()))(()(()((()()(())((()(()()(((())((((())))()))(()))))(()))))())(()()())))
33 98
12 82
10 14
50 69
49 98
17 77
8 25
10 14
33 88
18 23
21 77
78 96
17 26
34 88
19 62
56 90
65 79
7 83
27 75
24 87
4 47
11 36
11 72
27 65
6 16
43 95
39 61
47 53
42 61
55 59
50 70
44 72
35...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

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

Test #8:

score: 0
Accepted
time: 89ms
memory: 5924kb

input:

2000 20000
(((((()))(((((()()))()()((())()(()()()()()((((())()(()()((((())((()()(())((((((())))(()())))))()(()())(()(())(((())((()))(()))((()())))()(())((())(())((()()()(()))((()()((())((()))))(())((()(()()())))))()(((()(((())))((()))(()()()(((((()()((()))())))())))))())((())))))((())(()()()()))((((...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

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

Test #9:

score: 0
Accepted
time: 311ms
memory: 6632kb

input:

10000 50000
((()))()(()(()())((()))(())())(())()(((()())()()()()()))(((()()()()))((((()))))(()()())())(())((((())())(((((((()(())())))))())()))(((()()((())))())((()))()(((())((())))())))(()((((((()())()())(())(()(()(((((()((()))(()))))()()((()))((()(())(()(()())((((()())()(())(((((((((()((()((())())...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

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

Test #10:

score: 0
Accepted
time: 890ms
memory: 9276kb

input:

50000 100000
((()((()()((((((()))())()(()((()((((((()))()())(()(())(()((())((((()))((()()))))(()())())))()()()())((()())))(()())()(((())())(()()))))((())(())((()((((()()()())()((()((((()))()))()()((((()())(()()((()(((((((()((()()))))()(()))())(()())()(())(())(((((((()))(())()()))(((((()))))(()))((()...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

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

Test #11:

score: 0
Accepted
time: 2086ms
memory: 13240kb

input:

100000 200000
()((()(())((((()(()()(()()(()(((())()(())()()()(((((((()(()((()))()()))))))())(()()((()()))()))())()((((()(())))))((())))((()()(())())(())())((()))()()))((((((()))))))()())(()())())((((()()((((()))))()(()()(()()())()())((()()(((())(()(()()()())((()((((()))()()((((((((()(((((()(()()(()(...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

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

Test #12:

score: 0
Accepted
time: 2364ms
memory: 20164kb

input:

150000 200000
((()()(()((((((()())((((((()(((()))()()(((()()(())(())(((()((())(((())(())(())())(((()((((())((())))())((()(()()()(()((()()(()((((()))(()))((())(()()(()()())))((((())())()))))(())))(((()(()))((()())))(()))(((((()((()))))(()()(((()))((((((()))())))()())((((())()(()))))((()())()))))))(((...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

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

Test #13:

score: 0
Accepted
time: 3171ms
memory: 20872kb

input:

200000 250000
(()())(()()()((((()((((((()())((((())()(()(())()(())(((()(())))(()())())(()()()()(()(()()((((()())())()()()((()()())))((()(()()))))))(()()))()(((())(()))()()(()(())))(()((()()())(()())))))()()()(())()(()())(()))))()())((((()(())()(((())))((()()))())((()()(((((()))(())((())))(((()((((((...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

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

Test #14:

score: -100
Time Limit Exceeded

input:

300000 300000
((((()(()((()()))()(((((((()()())))((((()(()())(())))(())()()(())(()()()(((((()(((()))(((()((((())))))())(()()())((()))((()))()())())((((()(((()((((((()))((())((())))()(()(((()))(((()()(()())(()()(()(()))())()()(())))((((((())()(()))(((()())((((()(()((())()()))))()(())(((((())))))(()((...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result: