UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#192650#2037. awosile1005871ms205284kbC++111.1kb2023-10-10 08:30:522023-10-10 12:33:14

answer

#include<bits/stdc++.h>
using namespace std;
char s[1000005];
int a[1000005],b[1000005];
int ma[1000005][25],mb[1000005][25];
int n,q;
int getma(int l,int r){
	int mn=0x3f3f3f3f;
	for(int i=20;i>=0;i--)if(l+(1<<i)-1<=r){
		mn=min(mn,ma[l][i]);
		l+=(1<<i);
	}
	return mn;
}
int getmb(int l,int r){
	int mn=0x3f3f3f3f;
	for(int i=20;i>=0;i--)if(l+(1<<i)-1<=r){
		mn=min(mn,mb[l][i]);
		l+=(1<<i);
	}
	return mn;
}
int main(){
	scanf("%s",s+1);
	n=strlen(s+1);
	for(int i=1;i<=n;i++)a[i]=a[i-1]+(s[i]=='('?1:-1);
	for(int i=n;i>=1;i--)b[i]=b[i+1]+(s[i]==')'?1:-1);
//	for(int i=1;i<=n;i++)printf("%d ",b[i]);printf("\n");
	for(int i=0;i<=n+1;i++)ma[i][0]=a[i],mb[i][0]=b[i];
	for(int j=1;j<=20;j++)for(int i=0;i+(1<<j)-1<=n+1;i++)ma[i][j]=min(ma[i][j-1],ma[i+(1<<(j-1))][j-1]),mb[i][j]=min(mb[i][j-1],mb[i+(1<<(j-1))][j-1]);
	scanf("%d",&q);
	while(q--){
		int l,r;
		scanf("%d%d",&l,&r);
		printf("%d\n",r-l+1-(a[l-1]-getma(l-1,r))-(b[r+1]-getmb(l,r+1)));
//		printf("%d %d %d %d\n",a[l-1],getma(l-1,r),b[r+1],getmb(l,r+1));
	}
	return 0;
}
/*
())(())(())(
4
1 12
8 12
5 11
2 10
*/

详细

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

Test #1:

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

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

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: 0ms
memory: 1400kb

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

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: 0ms
memory: 1400kb

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

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: 1386ms
memory: 205284kb

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: 1363ms
memory: 205284kb

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: 1768ms
memory: 205284kb

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: 1354ms
memory: 205284kb

input:

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

output:

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

result:

ok 1000000 lines