#include <bits/stdc++.h>
#define pii pair<int, int>
#define X first
#define Y second
#define pb push_back
using namespace std;
const int SQR = 5010;
const int N = 2 * 1e5 + 10;
int n, xr, lastans, pos[N];
int b_cnt; //num. of buckets
int cnt; //num of diff. intervals
bool ban[N];
pii intv[N];
vector<vector<int>> lft, rgt;
vector<pii> bkt, bkt2, add;
vector<int> vl, vr, rem;
int intersect(pii a, pii b){
if(b.X > a.Y || a.X > b.Y) return 0;
return min(a.Y, b.Y) - max(a.X, b.X) + 1;
}
void bucket(){
for(int x : rem) ban[x] = true;
sort(add.begin(), add.end());
int p1 = 0;
int p2 = 0;
lft.clear();
rgt.clear();
while(p1 < add.size() || p2 < bkt.size()){
if(p1 < add.size() && p2 < bkt.size()){
if(add[p1].X < bkt[p2].X){
bkt2.pb(add[p1]);
p1++;
} else {
bkt2.pb(bkt[p2]);
p2++;
}
} else if(p1 < add.size()){
bkt2.pb(add[p1]);
p2++;
} else {
bkt2.pb(bkt[p2]);
p2++;
}
}
bkt.clear();
for(pii x : bkt2){
if(!ban[x.Y])
bkt.pb(x);
}
bkt2.clear();
for(pii x : bkt){
vl.pb(intv[x.Y].X);
vr.pb(intv[x.Y].Y);
if(vl.size() >= SQR){
sort(vl.begin(), vl.end());
sort(vr.begin(), vr.end());
lft.pb(vl);
rgt.pb(vr);
vl.clear();
vr.clear();
}
}
if(!vl.empty()){
sort(vl.begin(), vl.end());
sort(vr.begin(), vr.end());
lft.pb(vl);
rgt.pb(vr);
vl.clear();
vr.clear();
}
for(int x : rem) ban[x] = false;
rem.clear();
add.clear();
b_cnt = lft.size();
}
int main(){
for(int i = 0; i < N; i++) pos[i] = i / SQR;
scanf("%d%d", &n, &xr);
//cout << intersect({1, 2}, {2, 3}) << "\n";
for(int i = 0; i < n; i++){
int t;
cin >> t;
if(t == 1){
int l, r;
scanf("%d%d", &l, &r);
l = l ^ (xr * lastans);
r = r ^ (xr * lastans);
if(l > r) swap(l, r);
intv[++cnt] = {l, r};
add.pb({r - l + 1, cnt});
} else if(t == 2){
int ind;
scanf("%d", &ind);
rem.pb(ind);
} else {
int l, r, k;
int ans = 0;
scanf("%d%d%d", &l, &r, &k);
l = l ^ (xr * lastans);
r = r ^ (xr * lastans);
if(l > r) swap(l, r);
for(int x : rem){
// cout << intv[x].X << " " << intv[x].Y << " " << l << " " << r << ": " << intersect(intv[x], {l, r}) << " -\n";
if(intersect(intv[x], {l, r}) >= k) ans--;
}
for(pii x : add){
// cout << intv[x.Y].X << " " << intv[x.Y].Y << " " << l << " " << r << ": " << intersect(intv[x.Y], {l, r}) << " +\n";
if(intersect(intv[x.Y], {l, r}) >= k) ans++;
}
// int lo = 0, hi = b_cnt - 1;
// while(hi - lo > 1){
// int mi = (lo + hi) / 2;
// if(bkt[mi].X < k)
// lo = mi;
// else
// hi = mi;
// }
// int b = pos[lo];
// while(lo < bkt.size() && pos[lo] == b){
// if(intersect(intv[bkt[lo].Y], {l, r}) >= k);
// lo++;
// }
// b++;
// for(b; b < b_cnt; b++){
// ans += lft[b].size();
// ans -= upper_bound(rgt[b].begin(), rgt[b].end(), l + k) - rgt[b].begin();
// ans -= lft[b].end() - upper_bound(lft[b].begin(), lft[b].end(), r - k);
// }
cout << ans << "\n";
lastans = ans;
}
if(add.size() + rem.size() >= SQR){
bucket();
}
}
return 0;
}
Compilation message
segments.cpp: In function 'void bucket()':
segments.cpp:37:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
37 | while(p1 < add.size() || p2 < bkt.size()){
| ~~~^~~~~~~~~~~~
segments.cpp:37:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
37 | while(p1 < add.size() || p2 < bkt.size()){
| ~~~^~~~~~~~~~~~
segments.cpp:38:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
38 | if(p1 < add.size() && p2 < bkt.size()){
| ~~~^~~~~~~~~~~~
segments.cpp:38:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
38 | if(p1 < add.size() && p2 < bkt.size()){
| ~~~^~~~~~~~~~~~
segments.cpp:46:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
46 | } else if(p1 < add.size()){
| ~~~^~~~~~~~~~~~
segments.cpp: In function 'int main()':
segments.cpp:93:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
93 | scanf("%d%d", &n, &xr);
| ~~~~~^~~~~~~~~~~~~~~~~
segments.cpp:102:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
102 | scanf("%d%d", &l, &r);
| ~~~~~^~~~~~~~~~~~~~~~
segments.cpp:112:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
112 | scanf("%d", &ind);
| ~~~~~^~~~~~~~~~~~
segments.cpp:117:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
117 | scanf("%d%d%d", &l, &r, &k);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
980 KB |
Output is correct |
2 |
Correct |
1 ms |
980 KB |
Output is correct |
3 |
Correct |
19 ms |
1108 KB |
Output is correct |
4 |
Correct |
19 ms |
1064 KB |
Output is correct |
5 |
Correct |
23 ms |
1108 KB |
Output is correct |
6 |
Correct |
30 ms |
1188 KB |
Output is correct |
7 |
Correct |
22 ms |
1144 KB |
Output is correct |
8 |
Correct |
17 ms |
1108 KB |
Output is correct |
9 |
Correct |
15 ms |
1176 KB |
Output is correct |
10 |
Correct |
7 ms |
1108 KB |
Output is correct |
11 |
Correct |
41 ms |
1168 KB |
Output is correct |
12 |
Correct |
39 ms |
1176 KB |
Output is correct |
13 |
Correct |
8 ms |
1108 KB |
Output is correct |
14 |
Correct |
18 ms |
1176 KB |
Output is correct |
15 |
Correct |
20 ms |
1236 KB |
Output is correct |
16 |
Correct |
19 ms |
1108 KB |
Output is correct |
17 |
Correct |
21 ms |
1076 KB |
Output is correct |
18 |
Correct |
15 ms |
1108 KB |
Output is correct |
19 |
Correct |
17 ms |
1168 KB |
Output is correct |
20 |
Correct |
17 ms |
1168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
50 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
91 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
100 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
980 KB |
Output is correct |
2 |
Correct |
1 ms |
980 KB |
Output is correct |
3 |
Correct |
19 ms |
1108 KB |
Output is correct |
4 |
Correct |
19 ms |
1064 KB |
Output is correct |
5 |
Correct |
23 ms |
1108 KB |
Output is correct |
6 |
Correct |
30 ms |
1188 KB |
Output is correct |
7 |
Correct |
22 ms |
1144 KB |
Output is correct |
8 |
Correct |
17 ms |
1108 KB |
Output is correct |
9 |
Correct |
15 ms |
1176 KB |
Output is correct |
10 |
Correct |
7 ms |
1108 KB |
Output is correct |
11 |
Correct |
41 ms |
1168 KB |
Output is correct |
12 |
Correct |
39 ms |
1176 KB |
Output is correct |
13 |
Correct |
8 ms |
1108 KB |
Output is correct |
14 |
Correct |
18 ms |
1176 KB |
Output is correct |
15 |
Correct |
20 ms |
1236 KB |
Output is correct |
16 |
Correct |
19 ms |
1108 KB |
Output is correct |
17 |
Correct |
21 ms |
1076 KB |
Output is correct |
18 |
Correct |
15 ms |
1108 KB |
Output is correct |
19 |
Correct |
17 ms |
1168 KB |
Output is correct |
20 |
Correct |
17 ms |
1168 KB |
Output is correct |
21 |
Runtime error |
50 ms |
65536 KB |
Execution killed with signal 9 |
22 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
980 KB |
Output is correct |
2 |
Correct |
1 ms |
980 KB |
Output is correct |
3 |
Correct |
19 ms |
1108 KB |
Output is correct |
4 |
Correct |
19 ms |
1064 KB |
Output is correct |
5 |
Correct |
23 ms |
1108 KB |
Output is correct |
6 |
Correct |
30 ms |
1188 KB |
Output is correct |
7 |
Correct |
22 ms |
1144 KB |
Output is correct |
8 |
Correct |
17 ms |
1108 KB |
Output is correct |
9 |
Correct |
15 ms |
1176 KB |
Output is correct |
10 |
Correct |
7 ms |
1108 KB |
Output is correct |
11 |
Correct |
41 ms |
1168 KB |
Output is correct |
12 |
Correct |
39 ms |
1176 KB |
Output is correct |
13 |
Correct |
8 ms |
1108 KB |
Output is correct |
14 |
Correct |
18 ms |
1176 KB |
Output is correct |
15 |
Correct |
20 ms |
1236 KB |
Output is correct |
16 |
Correct |
19 ms |
1108 KB |
Output is correct |
17 |
Correct |
21 ms |
1076 KB |
Output is correct |
18 |
Correct |
15 ms |
1108 KB |
Output is correct |
19 |
Correct |
17 ms |
1168 KB |
Output is correct |
20 |
Correct |
17 ms |
1168 KB |
Output is correct |
21 |
Runtime error |
50 ms |
65536 KB |
Execution killed with signal 9 |
22 |
Halted |
0 ms |
0 KB |
- |