/*
"care a facut teste cu Lattice reduction attack e ciudat"
"linistiti va putin"
- 2023 -
*/
#include<bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
using namespace std;
struct event
{
int x;
int y;
int moment;
};
int mom,n;
bool state[300005];
bool initialstate[300005];
bool type[300005];
int l[300005];
int r[300005];
int pos[300005];
int altaib[300005];
vector<event> updates;
vector<int> vals[300005];
vector<int> aib[300005];
void altupdate(int index, int delta)
{
while (index<=n)
{
altaib[index]+=delta;
index+=index&(-index);
}
}
int altquery(int index)
{
int ans;
ans=0;
while (index>0)
{
ans+=altaib[index];
index-=index&(-index);
}
return ans;
}
void setupdate(int x, int y)
{
for (; x<=n; x+=x&(-x))
{
vals[x].push_back(y);
}
}
void updatinho(int apos)
{
int st,dr;
st=apos-1;
while (st>0 && state[st]==1)
{
st--;
}
st++;
dr=apos+1;
while (dr<n+1 && state[dr]==1)
{
dr++;
}
dr--;
setupdate(st,apos);
updates.push_back({st,apos,mom});
setupdate(apos+1,apos);
updates.push_back({apos+1,apos,mom});
setupdate(st,dr+1);
updates.push_back({st,dr+1,mom});
setupdate(apos+1,dr+1);
updates.push_back({apos+1,dr+1,mom});
}
int indice(int x, int y)
{
return upper_bound(vals[x].begin(),vals[x].end(),y)-vals[x].begin()-1;
}
void update(int x, int y, int delta)
{
int newy;
for (; x<=n; x+=x&(-x))
{
newy=indice(x,y);
for (; newy<=aib[x].size(); newy+=newy&(-newy))
{
aib[x][newy]+=delta;
}
}
}
int query(int x, int y)
{
int ans,newy;
ans=0;
for (; x>0; x-=x&(-x))
{
newy=indice(x,y);
for (; newy>0; newy-=newy&(-newy))
{
ans+=aib[x][newy];
}
}
return ans;
}
signed main()
{
ifstream fin("secvp.in");
ofstream fout("secvp.out");
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long q,i,j,cnt;
char ch;
string s;
cin >> n >> q;
for (i=1; i<=n; i++)
{
cin >> ch;
if (ch=='0')
state[i]=0;
else
state[i]=1;
if (state[i]==1)
altupdate(i,1);
initialstate[i]=state[i];
}
for (i=1; i<=q; i++)
{
cin >> s;
if (s=="query")
type[i]=1;
else
type[i]=0;
if (type[i]==1)
{
cin >> l[i] >> r[i];
}
else
{
cin >> pos[i];
mom=i;
updatinho(pos[i]);
state[pos[i]]=1-state[pos[i]];
}
}
for (i=1; i<=n+1; i++)
{
vals[i].push_back(0);
sort(vals[i].begin(),vals[i].end());
aib[i].resize(vals[i].size());
state[i]=initialstate[i];
}
cnt=0;
for (i=1; i<=q; i++)
{
if (type[i]==1)
{
if (altquery(r[i]-1)-altquery(l[i]-1)==(r[i]-l[i]))
cout << i+query(l[i],r[i]-1) << "\n";
else
cout << query(l[i],r[i]-1) << "\n";
}
else
{
if (state[pos[i]]==1)
{
update(updates[cnt].x,updates[cnt].y,updates[cnt].moment);
cnt++;
update(updates[cnt].x,updates[cnt].y,-updates[cnt].moment);
cnt++;
update(updates[cnt].x,updates[cnt].y,-updates[cnt].moment);
cnt++;
update(updates[cnt].x,updates[cnt].y,updates[cnt].moment);
cnt++;
altupdate(pos[i],-1);
}
else
{
update(updates[cnt].x,updates[cnt].y,-updates[cnt].moment);
cnt++;
update(updates[cnt].x,updates[cnt].y,updates[cnt].moment);
cnt++;
update(updates[cnt].x,updates[cnt].y,updates[cnt].moment);
cnt++;
update(updates[cnt].x,updates[cnt].y,-updates[cnt].moment);
cnt++;
altupdate(pos[i],1);
}
state[pos[i]]=1-state[pos[i]];
}
}
}
Compilation message
street_lamps.cpp: In function 'void update(int, int, int)':
street_lamps.cpp:97:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
97 | for (; newy<=aib[x].size(); newy+=newy&(-newy))
| ~~~~^~~~~~~~~~~~~~~
street_lamps.cpp: In function 'int main()':
street_lamps.cpp:126:19: warning: unused variable 'j' [-Wunused-variable]
126 | long long q,i,j,cnt;
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
19036 KB |
Output is correct |
2 |
Correct |
5 ms |
19036 KB |
Output is correct |
3 |
Correct |
4 ms |
19036 KB |
Output is correct |
4 |
Correct |
4 ms |
19036 KB |
Output is correct |
5 |
Correct |
5 ms |
19036 KB |
Output is correct |
6 |
Correct |
4 ms |
19036 KB |
Output is correct |
7 |
Correct |
4 ms |
19036 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
473 ms |
47848 KB |
Output is correct |
2 |
Correct |
627 ms |
51300 KB |
Output is correct |
3 |
Correct |
991 ms |
63140 KB |
Output is correct |
4 |
Correct |
1598 ms |
100512 KB |
Output is correct |
5 |
Correct |
1276 ms |
86304 KB |
Output is correct |
6 |
Correct |
1604 ms |
112152 KB |
Output is correct |
7 |
Correct |
184 ms |
43292 KB |
Output is correct |
8 |
Correct |
182 ms |
44188 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
19292 KB |
Output is correct |
2 |
Correct |
6 ms |
19292 KB |
Output is correct |
3 |
Correct |
5 ms |
19292 KB |
Output is correct |
4 |
Correct |
4 ms |
19112 KB |
Output is correct |
5 |
Correct |
2589 ms |
150176 KB |
Output is correct |
6 |
Correct |
1937 ms |
121380 KB |
Output is correct |
7 |
Correct |
1224 ms |
85136 KB |
Output is correct |
8 |
Correct |
226 ms |
44228 KB |
Output is correct |
9 |
Correct |
67 ms |
21668 KB |
Output is correct |
10 |
Correct |
97 ms |
22076 KB |
Output is correct |
11 |
Correct |
101 ms |
21932 KB |
Output is correct |
12 |
Correct |
196 ms |
42692 KB |
Output is correct |
13 |
Correct |
223 ms |
43996 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
19036 KB |
Output is correct |
2 |
Correct |
5 ms |
19268 KB |
Output is correct |
3 |
Correct |
6 ms |
19292 KB |
Output is correct |
4 |
Correct |
7 ms |
19292 KB |
Output is correct |
5 |
Correct |
272 ms |
43700 KB |
Output is correct |
6 |
Correct |
919 ms |
77052 KB |
Output is correct |
7 |
Correct |
1593 ms |
113428 KB |
Output is correct |
8 |
Correct |
2621 ms |
153440 KB |
Output is correct |
9 |
Correct |
853 ms |
75752 KB |
Output is correct |
10 |
Correct |
868 ms |
75240 KB |
Output is correct |
11 |
Correct |
830 ms |
75240 KB |
Output is correct |
12 |
Correct |
835 ms |
76572 KB |
Output is correct |
13 |
Correct |
818 ms |
76116 KB |
Output is correct |
14 |
Correct |
863 ms |
74944 KB |
Output is correct |
15 |
Correct |
172 ms |
42776 KB |
Output is correct |
16 |
Correct |
178 ms |
44116 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
19036 KB |
Output is correct |
2 |
Correct |
5 ms |
19036 KB |
Output is correct |
3 |
Correct |
4 ms |
19036 KB |
Output is correct |
4 |
Correct |
4 ms |
19036 KB |
Output is correct |
5 |
Correct |
5 ms |
19036 KB |
Output is correct |
6 |
Correct |
4 ms |
19036 KB |
Output is correct |
7 |
Correct |
4 ms |
19036 KB |
Output is correct |
8 |
Correct |
473 ms |
47848 KB |
Output is correct |
9 |
Correct |
627 ms |
51300 KB |
Output is correct |
10 |
Correct |
991 ms |
63140 KB |
Output is correct |
11 |
Correct |
1598 ms |
100512 KB |
Output is correct |
12 |
Correct |
1276 ms |
86304 KB |
Output is correct |
13 |
Correct |
1604 ms |
112152 KB |
Output is correct |
14 |
Correct |
184 ms |
43292 KB |
Output is correct |
15 |
Correct |
182 ms |
44188 KB |
Output is correct |
16 |
Correct |
6 ms |
19292 KB |
Output is correct |
17 |
Correct |
6 ms |
19292 KB |
Output is correct |
18 |
Correct |
5 ms |
19292 KB |
Output is correct |
19 |
Correct |
4 ms |
19112 KB |
Output is correct |
20 |
Correct |
2589 ms |
150176 KB |
Output is correct |
21 |
Correct |
1937 ms |
121380 KB |
Output is correct |
22 |
Correct |
1224 ms |
85136 KB |
Output is correct |
23 |
Correct |
226 ms |
44228 KB |
Output is correct |
24 |
Correct |
67 ms |
21668 KB |
Output is correct |
25 |
Correct |
97 ms |
22076 KB |
Output is correct |
26 |
Correct |
101 ms |
21932 KB |
Output is correct |
27 |
Correct |
196 ms |
42692 KB |
Output is correct |
28 |
Correct |
223 ms |
43996 KB |
Output is correct |
29 |
Correct |
6 ms |
19036 KB |
Output is correct |
30 |
Correct |
5 ms |
19268 KB |
Output is correct |
31 |
Correct |
6 ms |
19292 KB |
Output is correct |
32 |
Correct |
7 ms |
19292 KB |
Output is correct |
33 |
Correct |
272 ms |
43700 KB |
Output is correct |
34 |
Correct |
919 ms |
77052 KB |
Output is correct |
35 |
Correct |
1593 ms |
113428 KB |
Output is correct |
36 |
Correct |
2621 ms |
153440 KB |
Output is correct |
37 |
Correct |
853 ms |
75752 KB |
Output is correct |
38 |
Correct |
868 ms |
75240 KB |
Output is correct |
39 |
Correct |
830 ms |
75240 KB |
Output is correct |
40 |
Correct |
835 ms |
76572 KB |
Output is correct |
41 |
Correct |
818 ms |
76116 KB |
Output is correct |
42 |
Correct |
863 ms |
74944 KB |
Output is correct |
43 |
Correct |
172 ms |
42776 KB |
Output is correct |
44 |
Correct |
178 ms |
44116 KB |
Output is correct |
45 |
Correct |
121 ms |
33784 KB |
Output is correct |
46 |
Correct |
283 ms |
37588 KB |
Output is correct |
47 |
Correct |
753 ms |
62908 KB |
Output is correct |
48 |
Correct |
1395 ms |
99712 KB |
Output is correct |
49 |
Correct |
73 ms |
22244 KB |
Output is correct |
50 |
Correct |
78 ms |
22248 KB |
Output is correct |
51 |
Correct |
77 ms |
22096 KB |
Output is correct |
52 |
Correct |
74 ms |
22456 KB |
Output is correct |
53 |
Correct |
72 ms |
22352 KB |
Output is correct |
54 |
Correct |
74 ms |
22460 KB |
Output is correct |