UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#215045#2037. aInvisible_H1003808ms29900kbC++1.2kb2024-11-25 21:06:032024-11-25 23:11:16

answer

#include<bits/stdc++.h>
#define N 1000010
#define mid (l+r>>1)
using namespace std;
char c[N];
int n,m,s[N],w[N],t=0,l[N],r[N],v[N],a[N],b[N<<2];
void build(int l,int r,int x){
    if(l==r){ b[x]=a[l]; return; }
    build(l,mid,x<<1);
    build(mid+1,r,x<<1|1);
    b[x]=min(b[x<<1],b[x<<1|1]);
}
inline int query(int l,int r,int x,int L,int R){
    if(L<=l && r<=R) return b[x];
    int ans=n;
    if(L<=mid) ans=min(ans,query(l,mid,x<<1,L,R));
    if(mid<R) ans=min(ans,query(mid+1,r,x<<1|1,L,R));
    return ans;
}
signed main(){
    scanf("%s%d",c+1,&m); n=strlen(c+1);
    for(int i=1;i<=n;++i){
        if(!t && c[i]==')') v[i]=1;
        else if(c[i]=='(') w[++t]=i;
        else {
            s[i]=w[t]; s[w[t]]=i;
            ++l[w[t]+1]; --l[i+1];
            ++r[w[t]]; --r[i];
            ++a[w[t]]; --a[i+1];
            --t;
        }
    }
    for(;t;--t) v[w[t]]=1;
    for(int i=1;i<=n;++i){
        a[i]+=a[i-1];
        r[i]+=r[i-1]; l[i]+=l[i-1];
    }
    for(int i=1;i<=n;++i) a[i]-=!v[i],v[i]+=v[i-1];
    build(1,n,1);
    for(int x,y;m--;){
        scanf("%d%d",&x,&y);
        printf("%d\n",max(0,y-x+1-(v[y]-v[x-1])-r[y]-l[x]+query(1,n,1,x,y)*2));
    }
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 2ms
memory: 1248kb

input:

(()))())))(())()())()()))((((()()))((((()((())()))(()((((()(())(())(()))())()())()())(())(()()((((((...

output:

854
136
108
12
836
206
550
252
536
266
220
344
830
502
170
290
522
526
464
98
160
10
840
298
332
272...

result:

ok 1000 lines

Test #2:

score: 10
Accepted
time: 0ms
memory: 1252kb

input:

)))((()())((())((()()())())(((())())((()((())(())()((((((())))((()(()())))(()()(())())()))(()()))(((...

output:

30
22
96
382
252
154
386
56
434
102
590
456
114
56
346
252
324
12
138
184
320
52
380
470
64
476
40
4...

result:

ok 1000 lines

Test #3:

score: 10
Accepted
time: 1ms
memory: 1248kb

input:

(()((())))))))((())(()()))()))()()())(()))(())))))))(((())((((((((((()((()())()(()(())(()())(()))(((...

output:

674
192
100
168
206
244
378
746
184
196
196
602
414
302
224
358
232
482
154
448
168
704
232
232
810
...

result:

ok 1000 lines

Test #4:

score: 10
Accepted
time: 0ms
memory: 1248kb

input:

))))))))()))())()(()()())()())(((()())(((()(((()()))(()()()))())(()()(()()())()(())()())))))()((((()...

output:

168
378
240
380
548
324
54
492
724
276
184
398
66
452
404
192
192
594
192
128
918
424
516
46
108
430...

result:

ok 1000 lines

Test #5:

score: 10
Accepted
time: 1ms
memory: 1248kb

input:

((())))(()((()()))()))))((((()()()()()()()))()()(()(())(()((()))()((())))))()(((()())()))()())))(())...

output:

634
386
334
6
246
372
226
424
274
168
254
448
312
112
532
126
594
780
112
150
68
470
260
150
22
322
...

result:

ok 1000 lines

Test #6:

score: 10
Accepted
time: 0ms
memory: 1248kb

input:

))((()))()(())())(()()))))()()((((()()())()((())(())))))(())))()())()()(())()(())())(()())))(()()))(...

output:

728
224
580
200
784
152
280
194
0
664
278
260
630
328
816
470
388
736
82
132
406
440
140
12
276
776
...

result:

ok 1000 lines

Test #7:

score: 10
Accepted
time: 931ms
memory: 29896kb

input:

((((()))()()())(()))((()())(((())))(()((()))))))()()))()))((((()(()(()()()(()(())(()())))(((()())))(...

output:

142860
235344
446706
759772
134088
748980
83870
685562
31730
572204
366368
67746
18554
603330
946486...

result:

ok 1000000 lines

Test #8:

score: 10
Accepted
time: 941ms
memory: 29896kb

input:

())))()))))(()))()())(()(()))((()))))(()))((())()((()(()()((())(())()))(()))))())(((()(())()(())()()...

output:

583148
425884
255036
448502
200322
256890
167684
114904
55236
440164
138094
879918
580038
452166
984...

result:

ok 1000000 lines

Test #9:

score: 10
Accepted
time: 980ms
memory: 29900kb

input:

)()((()())(())())(()())))(((()())()()(((((()(()()(()(())(()())((()(((()()))()))))()(((())(((((()()()...

output:

47942
241400
323510
553980
111490
20570
51892
169422
82080
124416
107806
804528
123414
274334
135650...

result:

ok 1000000 lines

Test #10:

score: 10
Accepted
time: 952ms
memory: 29900kb

input:

())()()(()())))())())))))))(()((()()(((()))(()(())))(())))())(()((()))()))(()))()((((((())(())(())((...

output:

487878
425694
419984
176404
493462
782462
63276
27548
109942
308166
354282
302574
697816
3128
144748...

result:

ok 1000000 lines