#include<bits/stdc++.h>
#define ll long long
#define ljc 998244353
using namespace std;
#define gc getchar
inline ll read(){
register ll x=0,f=1;char ch=gc();
while (!isdigit(ch)){if(ch=='-')f=-1;ch=gc();}
while (isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=gc();}
return (f==1)?x:-x;
}
int n,N,T,root[600001],cnt;
struct node{
int l,r,sum;
}seg[15020001];
#define mid ((lb+rb)>>1)
void Update(int &rt,int lb,int rb,int pos,int w){
if (!rt) rt=++cnt;seg[rt].sum+=w;
if (lb==rb) return;
(mid>=pos?Update(seg[rt].l,lb,mid,pos,w):Update(seg[rt].r,mid+1,rb,pos,w));
}
int Query(int rt,int lb,int rb,int l,int r){
if (!rt||lb>r||rb<l) return 0;
if (lb>=l&&rb<=r) return seg[rt].sum;
return Query(seg[rt].l,lb,mid,l,r)+Query(seg[rt].r,mid+1,rb,l,r);
}
inline void update(int pos,int r,int w){
for (;pos<=n+1;pos+=pos&-pos) Update(root[pos],1,n+1,r,w);
}
inline int query(int posx,int posy){
int ans=0;
for (;posx;posx-=posx&-posx) ans+=Query(root[posx],1,n+1,1,posy);
return ans;
}
inline void Add(int x1,int y1,int x2,int y2,int W){
update(x1,y1,W);update(x1,y2+1,-W);
update(x2+1,y1,-W);update(x2+1,y2+1,W);
}
struct road{
int l,r;
};
inline bool operator < (road a,road b){
return a.r<b.r;
}
set<road> S;
set<road>::iterator it;
bool zt[2000001];
signed main(){
n=1+read(),T=read();N=n-1;
for (int i=1;i<=n;i++){
S.insert((road){i,i});
}
for (int i=1;i<=N;i++){
char ch=gc();
while (!isdigit(ch)) ch=gc();
zt[i]=(ch-48);
if (zt[i]){
it=S.lower_bound((road){0,i+1});it--;
int lb=(*it).l;
S.erase(it);S.erase((road){i+1,i+1});
S.insert((road){lb,i+1});
}
}
for (it=S.begin();it!=S.end();++it){
Add((*it).l,(*it).l,(*it).r,(*it).r,T);
}
for (int t=1;t<=T;t++){
char s[11];scanf("%s",s+1);
if (s[1]=='q'){
int x=read(),y=read();
int ans=query(x,y);
int X=(*(S.lower_bound((road){0,x}))).l;
int Y=(*(S.lower_bound((road){0,y}))).l;
printf("%d\n",ans-(T-t)*(X==Y));
}else if (s[1]=='t'){
int x=read();
if (zt[x]==1){
it=S.lower_bound((road){0,x});
int lb1=(*it).l,rb1=x;
int lb2=x+1,rb2=(*it).r;
Add(lb1,lb2,rb1,rb2,t-T);
S.erase((road){lb1,rb2});
S.insert((road){lb1,rb1});S.insert((road){lb2,rb2});
zt[x]^=1;
}else{
it=S.lower_bound((road){0,x});
int lb1=(*it).l,rb1=x;
it++;
int lb2=x+1,rb2=(*it).r;
Add(lb1,lb2,rb1,rb2,T-t);
S.erase((road){lb1,rb1});S.erase((road){lb2,rb2});
S.insert((road){lb1,rb2});
zt[x]^=1;
}
}
}
return 0;
}
Compilation message
street_lamps.cpp: In function 'long long int read()':
street_lamps.cpp:7:17: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
7 | register ll x=0,f=1;char ch=gc();
| ^
street_lamps.cpp:7:21: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
7 | register ll x=0,f=1;char ch=gc();
| ^
street_lamps.cpp: In function 'void Update(int&, int, int, int, int)':
street_lamps.cpp:18:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
18 | if (!rt) rt=++cnt;seg[rt].sum+=w;
| ^~
street_lamps.cpp:18:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
18 | if (!rt) rt=++cnt;seg[rt].sum+=w;
| ^~~
street_lamps.cpp: In function 'int main()':
street_lamps.cpp:68:19: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
68 | char s[11];scanf("%s",s+1);
| ~~~~~^~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
312 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
320 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
260 ms |
1180 KB |
Output is correct |
2 |
Correct |
320 ms |
1644 KB |
Output is correct |
3 |
Correct |
676 ms |
4360 KB |
Output is correct |
4 |
Correct |
2680 ms |
141680 KB |
Output is correct |
5 |
Correct |
2315 ms |
118944 KB |
Output is correct |
6 |
Correct |
2963 ms |
145080 KB |
Output is correct |
7 |
Correct |
2582 ms |
160464 KB |
Output is correct |
8 |
Correct |
230 ms |
16896 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
684 KB |
Output is correct |
2 |
Correct |
3 ms |
596 KB |
Output is correct |
3 |
Correct |
3 ms |
556 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
4062 ms |
179024 KB |
Output is correct |
6 |
Correct |
3153 ms |
154116 KB |
Output is correct |
7 |
Correct |
2048 ms |
118356 KB |
Output is correct |
8 |
Correct |
241 ms |
16884 KB |
Output is correct |
9 |
Correct |
64 ms |
1384 KB |
Output is correct |
10 |
Correct |
76 ms |
1352 KB |
Output is correct |
11 |
Correct |
71 ms |
1468 KB |
Output is correct |
12 |
Correct |
2255 ms |
160456 KB |
Output is correct |
13 |
Correct |
221 ms |
17072 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
468 KB |
Output is correct |
2 |
Correct |
3 ms |
596 KB |
Output is correct |
3 |
Correct |
3 ms |
596 KB |
Output is correct |
4 |
Correct |
4 ms |
596 KB |
Output is correct |
5 |
Correct |
1482 ms |
117536 KB |
Output is correct |
6 |
Correct |
2067 ms |
133540 KB |
Output is correct |
7 |
Correct |
2713 ms |
144784 KB |
Output is correct |
8 |
Correct |
3422 ms |
154920 KB |
Output is correct |
9 |
Correct |
392 ms |
916 KB |
Output is correct |
10 |
Correct |
342 ms |
612 KB |
Output is correct |
11 |
Correct |
408 ms |
836 KB |
Output is correct |
12 |
Correct |
336 ms |
612 KB |
Output is correct |
13 |
Correct |
417 ms |
1104 KB |
Output is correct |
14 |
Correct |
353 ms |
608 KB |
Output is correct |
15 |
Correct |
2206 ms |
160456 KB |
Output is correct |
16 |
Correct |
235 ms |
16944 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
312 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
1 ms |
320 KB |
Output is correct |
8 |
Correct |
260 ms |
1180 KB |
Output is correct |
9 |
Correct |
320 ms |
1644 KB |
Output is correct |
10 |
Correct |
676 ms |
4360 KB |
Output is correct |
11 |
Correct |
2680 ms |
141680 KB |
Output is correct |
12 |
Correct |
2315 ms |
118944 KB |
Output is correct |
13 |
Correct |
2963 ms |
145080 KB |
Output is correct |
14 |
Correct |
2582 ms |
160464 KB |
Output is correct |
15 |
Correct |
230 ms |
16896 KB |
Output is correct |
16 |
Correct |
4 ms |
684 KB |
Output is correct |
17 |
Correct |
3 ms |
596 KB |
Output is correct |
18 |
Correct |
3 ms |
556 KB |
Output is correct |
19 |
Correct |
1 ms |
340 KB |
Output is correct |
20 |
Correct |
4062 ms |
179024 KB |
Output is correct |
21 |
Correct |
3153 ms |
154116 KB |
Output is correct |
22 |
Correct |
2048 ms |
118356 KB |
Output is correct |
23 |
Correct |
241 ms |
16884 KB |
Output is correct |
24 |
Correct |
64 ms |
1384 KB |
Output is correct |
25 |
Correct |
76 ms |
1352 KB |
Output is correct |
26 |
Correct |
71 ms |
1468 KB |
Output is correct |
27 |
Correct |
2255 ms |
160456 KB |
Output is correct |
28 |
Correct |
221 ms |
17072 KB |
Output is correct |
29 |
Correct |
2 ms |
468 KB |
Output is correct |
30 |
Correct |
3 ms |
596 KB |
Output is correct |
31 |
Correct |
3 ms |
596 KB |
Output is correct |
32 |
Correct |
4 ms |
596 KB |
Output is correct |
33 |
Correct |
1482 ms |
117536 KB |
Output is correct |
34 |
Correct |
2067 ms |
133540 KB |
Output is correct |
35 |
Correct |
2713 ms |
144784 KB |
Output is correct |
36 |
Correct |
3422 ms |
154920 KB |
Output is correct |
37 |
Correct |
392 ms |
916 KB |
Output is correct |
38 |
Correct |
342 ms |
612 KB |
Output is correct |
39 |
Correct |
408 ms |
836 KB |
Output is correct |
40 |
Correct |
336 ms |
612 KB |
Output is correct |
41 |
Correct |
417 ms |
1104 KB |
Output is correct |
42 |
Correct |
353 ms |
608 KB |
Output is correct |
43 |
Correct |
2206 ms |
160456 KB |
Output is correct |
44 |
Correct |
235 ms |
16944 KB |
Output is correct |
45 |
Correct |
83 ms |
1056 KB |
Output is correct |
46 |
Correct |
153 ms |
800 KB |
Output is correct |
47 |
Correct |
1091 ms |
48664 KB |
Output is correct |
48 |
Correct |
2453 ms |
141640 KB |
Output is correct |
49 |
Correct |
77 ms |
1100 KB |
Output is correct |
50 |
Correct |
79 ms |
1160 KB |
Output is correct |
51 |
Correct |
77 ms |
1228 KB |
Output is correct |
52 |
Correct |
87 ms |
1232 KB |
Output is correct |
53 |
Correct |
97 ms |
1232 KB |
Output is correct |
54 |
Correct |
82 ms |
1216 KB |
Output is correct |