ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#214990 | #2037. a | Wonder_Fun | 100 | 4092ms | 29224kb | C++ | 1.2kb | 2024-11-25 19:21:12 | 2024-11-25 23:03:14 |
answer
#include<stdio.h>
#include<string.h>
#include<algorithm>
#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;
}
int 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: 0ms
memory: 576kb
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: 1ms
memory: 572kb
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: 576kb
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: 1ms
memory: 576kb
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: 576kb
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: 576kb
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: 980ms
memory: 29220kb
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: 972ms
memory: 29224kb
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: 1027ms
memory: 29220kb
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: 1110ms
memory: 29224kb
input:
())()()(()())))())())))))))(()((()()(((()))(()(())))(())))())(()((()))()))(()))()((((((())(())(())((...
output:
487878 425694 419984 176404 493462 782462 63276 27548 109942 308166 354282 302574 697816 3128 144748...
result:
ok 1000000 lines