Submission #908908

# Submission time Handle Problem Language Result Execution time Memory
908908 2024-01-17T01:44:18 Z daoquanglinh2007 Segments (IZhO18_segments) C++17
75 / 100
2179 ms 47516 KB
#include <bits/stdc++.h>
using namespace std;
 
#define pii pair <int, int>
#define fi first
#define se second
#define mp make_pair
#define isz(a) (int)(a).size()
 
const int NM = 2e5, BL = 1e4, inf = 2e9+11;
 
int n, t, type[NM+5], a[NM+5], b[NM+5], id[NM+5], k[NM+5], lastans = 0;
int num = 0, l[NM+5], r[NM+5];
bool del[NM+5];
int sz, sz1, sz2;
vector <pii> v;
vector <int> arr, arr1, arr2;
vector <pii> bit1[NM+5], bit2[NM+5];
int cnt[NM+5];
 
void update(int n, vector <pii> bit[NM+5], int x, int y){
	while (x <= n){
		if (bit[x].empty()){
			bit[x].push_back(mp(y, 1));
		}
		else if (bit[x].back().fi < y){
			bit[x].push_back(mp(y, bit[x].back().se+1));
		}
		else{
			bit[x].back().se++;
		}
		x += x & (-x);
	}
}
 
int get(vector <pii> bit[NM+5], int x, int y){
	int res = 0, z;
	while (x > 0){
		if (bit[x].empty() || y < bit[x][0].fi);
		else if (y >= bit[x].back().fi){
			res += bit[x].back().se;
		}
		else{
			z = upper_bound(bit[x].begin(), bit[x].end(), mp(y, +inf))-bit[x].begin();
			res += bit[x][z-1].se;
		}
		x -= x & (-x);
	}
	return res;
}
 
void process(){
	v.clear();
	arr.clear();
	arr1.clear();
	arr2.clear();
	for (int i = 1; i <= num; i++)
		if (!del[i]){
			v.push_back(mp(l[i], r[i]));
			arr.push_back(-(r[i]-l[i]+1));
			arr1.push_back(-l[i]);
			arr2.push_back(r[i]);
		}
	sort(v.begin(), v.end(), [&](pii a, pii b){
		return a.se-a.fi+1 > b.se-b.fi+1;
	});	
	sort(arr.begin(), arr.end()); arr.erase(unique(arr.begin(), arr.end()), arr.end());
	sort(arr1.begin(), arr1.end()); arr1.erase(unique(arr1.begin(), arr1.end()), arr1.end());
	sort(arr2.begin(), arr2.end()); arr2.erase(unique(arr2.begin(), arr2.end()), arr2.end());
	
	sz = isz(arr), sz1 = isz(arr1), sz2 = isz(arr2);
	
	assert(sz <= NM);
	assert(sz1 <= NM);
	assert(sz2 <= NM);
	
	for (int i = 1; i <= sz1; i++) bit1[i].clear();
	for (int i = 1; i <= sz2; i++) bit2[i].clear();
	
	memset(cnt, 0, sizeof(cnt));
	int j = 0;
	for (pii P : v){
		update(sz1, bit1, lower_bound(arr1.begin(), arr1.end(), -P.fi)-arr1.begin()+1, -(P.se-P.fi+1));
		update(sz2, bit2, lower_bound(arr2.begin(), arr2.end(), P.se)-arr2.begin()+1, -(P.se-P.fi+1));
		while (arr[j] < -(P.se-P.fi+1)) j++;
		cnt[j+1]++;
	}
	
	for (int i = 1; i <= sz; i++) cnt[i] += cnt[i-1];
}
 
int find_pos(vector <int> &v, int x){
	if (v.empty()) return 0;
	if (x < v[0]) return 0;
	if (x >= v.back()) return isz(v);
	return upper_bound(v.begin(), v.end(), x)-v.begin();
}
 
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n >> t;
	for (int i = 0; i < n; i++){
		cin >> type[i];
		if (type[i] == 1){
			cin >> a[i] >> b[i];
			a[i] ^= (t*lastans), b[i] ^= (t*lastans);
			if (a[i] > b[i]) swap(a[i], b[i]);
			l[++num] = a[i], r[num] = b[i];
		}
		else if (type[i] == 2){
			cin >> id[i];
			del[id[i]] = 1;
		}
		else{
			cin >> a[i] >> b[i] >> k[i];
			a[i] ^= (t*lastans), b[i] ^= (t*lastans);
			if (a[i] > b[i]) swap(a[i], b[i]);
			if (b[i]-a[i]+1 < k[i]) lastans = 0;
			else{
				lastans = cnt[find_pos(arr, -k[i])]-get(bit1, find_pos(arr1, -b[i]+k[i]-2), -k[i])
			          -get(bit2, find_pos(arr2, a[i] < +inf-(k[i]-2) ? a[i]+k[i]-2 : +inf), -k[i]);
			          
				for (int j = i-i%BL; j < i; j++){
					if (type[j] == 1){
						int lo = max(a[j], a[i]), hi = min(b[j], b[i]);
						if (hi-lo+1 >= k[i]) lastans++;
					}
					else if (type[j] == 2){
						int lo = max(l[id[j]], a[i]), hi = min(r[id[j]], b[i]);
						if (hi-lo+1 >= k[i]) lastans--;
					}
				}
			}
			cout << lastans << '\n';
		}
		if (i%BL == BL-1 && i < n-1){
			process();
		}
	}
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 12636 KB Output is correct
2 Correct 3 ms 12636 KB Output is correct
3 Correct 27 ms 12632 KB Output is correct
4 Correct 27 ms 12636 KB Output is correct
5 Correct 20 ms 12636 KB Output is correct
6 Correct 27 ms 12788 KB Output is correct
7 Correct 30 ms 12636 KB Output is correct
8 Correct 17 ms 12636 KB Output is correct
9 Correct 20 ms 12636 KB Output is correct
10 Correct 9 ms 12836 KB Output is correct
11 Correct 37 ms 12828 KB Output is correct
12 Correct 34 ms 12636 KB Output is correct
13 Correct 8 ms 12632 KB Output is correct
14 Correct 21 ms 12636 KB Output is correct
15 Correct 26 ms 12632 KB Output is correct
16 Correct 25 ms 12632 KB Output is correct
17 Correct 23 ms 12632 KB Output is correct
18 Correct 12 ms 12636 KB Output is correct
19 Correct 26 ms 12728 KB Output is correct
20 Correct 25 ms 12636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 523 ms 23976 KB Output is correct
2 Correct 547 ms 24248 KB Output is correct
3 Correct 582 ms 24468 KB Output is correct
4 Correct 633 ms 25028 KB Output is correct
5 Correct 534 ms 33052 KB Output is correct
6 Correct 463 ms 32960 KB Output is correct
7 Correct 567 ms 23808 KB Output is correct
8 Correct 518 ms 24000 KB Output is correct
9 Correct 515 ms 24084 KB Output is correct
10 Correct 493 ms 17836 KB Output is correct
11 Correct 582 ms 19012 KB Output is correct
12 Correct 584 ms 28924 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1189 ms 14204 KB Output is correct
2 Correct 1197 ms 16184 KB Output is correct
3 Correct 1197 ms 16400 KB Output is correct
4 Correct 1198 ms 15980 KB Output is correct
5 Correct 539 ms 31716 KB Output is correct
6 Correct 469 ms 28360 KB Output is correct
7 Correct 597 ms 31172 KB Output is correct
8 Correct 496 ms 34780 KB Output is correct
9 Correct 507 ms 34884 KB Output is correct
10 Correct 802 ms 28608 KB Output is correct
11 Correct 1208 ms 16668 KB Output is correct
12 Correct 805 ms 31572 KB Output is correct
13 Correct 786 ms 27028 KB Output is correct
14 Correct 945 ms 21192 KB Output is correct
15 Correct 1014 ms 20484 KB Output is correct
16 Correct 1006 ms 18848 KB Output is correct
17 Correct 456 ms 26564 KB Output is correct
18 Correct 484 ms 26300 KB Output is correct
19 Correct 459 ms 26596 KB Output is correct
20 Correct 488 ms 26440 KB Output is correct
21 Correct 1188 ms 16948 KB Output is correct
22 Correct 1059 ms 23756 KB Output is correct
23 Correct 981 ms 25504 KB Output is correct
24 Correct 1059 ms 23708 KB Output is correct
25 Correct 1188 ms 15956 KB Output is correct
26 Correct 1178 ms 15956 KB Output is correct
27 Correct 1209 ms 16436 KB Output is correct
28 Correct 1207 ms 16152 KB Output is correct
29 Correct 928 ms 26816 KB Output is correct
30 Correct 911 ms 26528 KB Output is correct
31 Correct 493 ms 34760 KB Output is correct
32 Correct 797 ms 28596 KB Output is correct
33 Correct 765 ms 27420 KB Output is correct
34 Correct 979 ms 20172 KB Output is correct
35 Correct 871 ms 25360 KB Output is correct
36 Correct 754 ms 28356 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1067 ms 13952 KB Output is correct
2 Correct 1051 ms 14112 KB Output is correct
3 Correct 1084 ms 14284 KB Output is correct
4 Correct 1072 ms 14164 KB Output is correct
5 Correct 568 ms 30096 KB Output is correct
6 Correct 557 ms 16600 KB Output is correct
7 Correct 563 ms 31660 KB Output is correct
8 Correct 496 ms 18020 KB Output is correct
9 Correct 1010 ms 20924 KB Output is correct
10 Correct 759 ms 28860 KB Output is correct
11 Correct 1114 ms 16476 KB Output is correct
12 Correct 452 ms 32956 KB Output is correct
13 Correct 875 ms 24856 KB Output is correct
14 Correct 1040 ms 19696 KB Output is correct
15 Correct 535 ms 31368 KB Output is correct
16 Correct 819 ms 25788 KB Output is correct
17 Correct 516 ms 24280 KB Output is correct
18 Correct 510 ms 23832 KB Output is correct
19 Correct 513 ms 24116 KB Output is correct
20 Correct 582 ms 24652 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 12636 KB Output is correct
2 Correct 3 ms 12636 KB Output is correct
3 Correct 27 ms 12632 KB Output is correct
4 Correct 27 ms 12636 KB Output is correct
5 Correct 20 ms 12636 KB Output is correct
6 Correct 27 ms 12788 KB Output is correct
7 Correct 30 ms 12636 KB Output is correct
8 Correct 17 ms 12636 KB Output is correct
9 Correct 20 ms 12636 KB Output is correct
10 Correct 9 ms 12836 KB Output is correct
11 Correct 37 ms 12828 KB Output is correct
12 Correct 34 ms 12636 KB Output is correct
13 Correct 8 ms 12632 KB Output is correct
14 Correct 21 ms 12636 KB Output is correct
15 Correct 26 ms 12632 KB Output is correct
16 Correct 25 ms 12632 KB Output is correct
17 Correct 23 ms 12632 KB Output is correct
18 Correct 12 ms 12636 KB Output is correct
19 Correct 26 ms 12728 KB Output is correct
20 Correct 25 ms 12636 KB Output is correct
21 Correct 523 ms 23976 KB Output is correct
22 Correct 547 ms 24248 KB Output is correct
23 Correct 582 ms 24468 KB Output is correct
24 Correct 633 ms 25028 KB Output is correct
25 Correct 534 ms 33052 KB Output is correct
26 Correct 463 ms 32960 KB Output is correct
27 Correct 567 ms 23808 KB Output is correct
28 Correct 518 ms 24000 KB Output is correct
29 Correct 515 ms 24084 KB Output is correct
30 Correct 493 ms 17836 KB Output is correct
31 Correct 582 ms 19012 KB Output is correct
32 Correct 584 ms 28924 KB Output is correct
33 Correct 1067 ms 13952 KB Output is correct
34 Correct 1051 ms 14112 KB Output is correct
35 Correct 1084 ms 14284 KB Output is correct
36 Correct 1072 ms 14164 KB Output is correct
37 Correct 568 ms 30096 KB Output is correct
38 Correct 557 ms 16600 KB Output is correct
39 Correct 563 ms 31660 KB Output is correct
40 Correct 496 ms 18020 KB Output is correct
41 Correct 1010 ms 20924 KB Output is correct
42 Correct 759 ms 28860 KB Output is correct
43 Correct 1114 ms 16476 KB Output is correct
44 Correct 452 ms 32956 KB Output is correct
45 Correct 875 ms 24856 KB Output is correct
46 Correct 1040 ms 19696 KB Output is correct
47 Correct 535 ms 31368 KB Output is correct
48 Correct 819 ms 25788 KB Output is correct
49 Correct 516 ms 24280 KB Output is correct
50 Correct 510 ms 23832 KB Output is correct
51 Correct 513 ms 24116 KB Output is correct
52 Correct 582 ms 24652 KB Output is correct
53 Correct 1084 ms 14092 KB Output is correct
54 Correct 1066 ms 14360 KB Output is correct
55 Correct 1081 ms 14132 KB Output is correct
56 Correct 1069 ms 14420 KB Output is correct
57 Correct 569 ms 20016 KB Output is correct
58 Correct 468 ms 15696 KB Output is correct
59 Correct 610 ms 25780 KB Output is correct
60 Correct 504 ms 15328 KB Output is correct
61 Correct 849 ms 24964 KB Output is correct
62 Correct 574 ms 31504 KB Output is correct
63 Correct 544 ms 32456 KB Output is correct
64 Correct 553 ms 32712 KB Output is correct
65 Correct 1088 ms 17836 KB Output is correct
66 Correct 1095 ms 16528 KB Output is correct
67 Correct 849 ms 25804 KB Output is correct
68 Correct 949 ms 22996 KB Output is correct
69 Correct 643 ms 24108 KB Output is correct
70 Correct 504 ms 23756 KB Output is correct
71 Correct 554 ms 24336 KB Output is correct
72 Correct 493 ms 24004 KB Output is correct
73 Correct 1022 ms 18480 KB Output is correct
74 Correct 907 ms 22820 KB Output is correct
75 Correct 443 ms 32468 KB Output is correct
76 Correct 462 ms 32748 KB Output is correct
77 Correct 1063 ms 14160 KB Output is correct
78 Correct 1076 ms 14196 KB Output is correct
79 Correct 1077 ms 14148 KB Output is correct
80 Correct 1061 ms 14156 KB Output is correct
81 Correct 929 ms 22676 KB Output is correct
82 Correct 1049 ms 18404 KB Output is correct
83 Correct 1086 ms 16356 KB Output is correct
84 Correct 932 ms 22688 KB Output is correct
85 Correct 799 ms 25800 KB Output is correct
86 Correct 794 ms 28152 KB Output is correct
87 Correct 1052 ms 21288 KB Output is correct
88 Correct 1094 ms 16564 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 12636 KB Output is correct
2 Correct 3 ms 12636 KB Output is correct
3 Correct 27 ms 12632 KB Output is correct
4 Correct 27 ms 12636 KB Output is correct
5 Correct 20 ms 12636 KB Output is correct
6 Correct 27 ms 12788 KB Output is correct
7 Correct 30 ms 12636 KB Output is correct
8 Correct 17 ms 12636 KB Output is correct
9 Correct 20 ms 12636 KB Output is correct
10 Correct 9 ms 12836 KB Output is correct
11 Correct 37 ms 12828 KB Output is correct
12 Correct 34 ms 12636 KB Output is correct
13 Correct 8 ms 12632 KB Output is correct
14 Correct 21 ms 12636 KB Output is correct
15 Correct 26 ms 12632 KB Output is correct
16 Correct 25 ms 12632 KB Output is correct
17 Correct 23 ms 12632 KB Output is correct
18 Correct 12 ms 12636 KB Output is correct
19 Correct 26 ms 12728 KB Output is correct
20 Correct 25 ms 12636 KB Output is correct
21 Correct 523 ms 23976 KB Output is correct
22 Correct 547 ms 24248 KB Output is correct
23 Correct 582 ms 24468 KB Output is correct
24 Correct 633 ms 25028 KB Output is correct
25 Correct 534 ms 33052 KB Output is correct
26 Correct 463 ms 32960 KB Output is correct
27 Correct 567 ms 23808 KB Output is correct
28 Correct 518 ms 24000 KB Output is correct
29 Correct 515 ms 24084 KB Output is correct
30 Correct 493 ms 17836 KB Output is correct
31 Correct 582 ms 19012 KB Output is correct
32 Correct 584 ms 28924 KB Output is correct
33 Correct 1189 ms 14204 KB Output is correct
34 Correct 1197 ms 16184 KB Output is correct
35 Correct 1197 ms 16400 KB Output is correct
36 Correct 1198 ms 15980 KB Output is correct
37 Correct 539 ms 31716 KB Output is correct
38 Correct 469 ms 28360 KB Output is correct
39 Correct 597 ms 31172 KB Output is correct
40 Correct 496 ms 34780 KB Output is correct
41 Correct 507 ms 34884 KB Output is correct
42 Correct 802 ms 28608 KB Output is correct
43 Correct 1208 ms 16668 KB Output is correct
44 Correct 805 ms 31572 KB Output is correct
45 Correct 786 ms 27028 KB Output is correct
46 Correct 945 ms 21192 KB Output is correct
47 Correct 1014 ms 20484 KB Output is correct
48 Correct 1006 ms 18848 KB Output is correct
49 Correct 456 ms 26564 KB Output is correct
50 Correct 484 ms 26300 KB Output is correct
51 Correct 459 ms 26596 KB Output is correct
52 Correct 488 ms 26440 KB Output is correct
53 Correct 1188 ms 16948 KB Output is correct
54 Correct 1059 ms 23756 KB Output is correct
55 Correct 981 ms 25504 KB Output is correct
56 Correct 1059 ms 23708 KB Output is correct
57 Correct 1188 ms 15956 KB Output is correct
58 Correct 1178 ms 15956 KB Output is correct
59 Correct 1209 ms 16436 KB Output is correct
60 Correct 1207 ms 16152 KB Output is correct
61 Correct 928 ms 26816 KB Output is correct
62 Correct 911 ms 26528 KB Output is correct
63 Correct 493 ms 34760 KB Output is correct
64 Correct 797 ms 28596 KB Output is correct
65 Correct 765 ms 27420 KB Output is correct
66 Correct 979 ms 20172 KB Output is correct
67 Correct 871 ms 25360 KB Output is correct
68 Correct 754 ms 28356 KB Output is correct
69 Correct 1067 ms 13952 KB Output is correct
70 Correct 1051 ms 14112 KB Output is correct
71 Correct 1084 ms 14284 KB Output is correct
72 Correct 1072 ms 14164 KB Output is correct
73 Correct 568 ms 30096 KB Output is correct
74 Correct 557 ms 16600 KB Output is correct
75 Correct 563 ms 31660 KB Output is correct
76 Correct 496 ms 18020 KB Output is correct
77 Correct 1010 ms 20924 KB Output is correct
78 Correct 759 ms 28860 KB Output is correct
79 Correct 1114 ms 16476 KB Output is correct
80 Correct 452 ms 32956 KB Output is correct
81 Correct 875 ms 24856 KB Output is correct
82 Correct 1040 ms 19696 KB Output is correct
83 Correct 535 ms 31368 KB Output is correct
84 Correct 819 ms 25788 KB Output is correct
85 Correct 516 ms 24280 KB Output is correct
86 Correct 510 ms 23832 KB Output is correct
87 Correct 513 ms 24116 KB Output is correct
88 Correct 582 ms 24652 KB Output is correct
89 Correct 1084 ms 14092 KB Output is correct
90 Correct 1066 ms 14360 KB Output is correct
91 Correct 1081 ms 14132 KB Output is correct
92 Correct 1069 ms 14420 KB Output is correct
93 Correct 569 ms 20016 KB Output is correct
94 Correct 468 ms 15696 KB Output is correct
95 Correct 610 ms 25780 KB Output is correct
96 Correct 504 ms 15328 KB Output is correct
97 Correct 849 ms 24964 KB Output is correct
98 Correct 574 ms 31504 KB Output is correct
99 Correct 544 ms 32456 KB Output is correct
100 Correct 553 ms 32712 KB Output is correct
101 Correct 1088 ms 17836 KB Output is correct
102 Correct 1095 ms 16528 KB Output is correct
103 Correct 849 ms 25804 KB Output is correct
104 Correct 949 ms 22996 KB Output is correct
105 Correct 643 ms 24108 KB Output is correct
106 Correct 504 ms 23756 KB Output is correct
107 Correct 554 ms 24336 KB Output is correct
108 Correct 493 ms 24004 KB Output is correct
109 Correct 1022 ms 18480 KB Output is correct
110 Correct 907 ms 22820 KB Output is correct
111 Correct 443 ms 32468 KB Output is correct
112 Correct 462 ms 32748 KB Output is correct
113 Correct 1063 ms 14160 KB Output is correct
114 Correct 1076 ms 14196 KB Output is correct
115 Correct 1077 ms 14148 KB Output is correct
116 Correct 1061 ms 14156 KB Output is correct
117 Correct 929 ms 22676 KB Output is correct
118 Correct 1049 ms 18404 KB Output is correct
119 Correct 1086 ms 16356 KB Output is correct
120 Correct 932 ms 22688 KB Output is correct
121 Correct 799 ms 25800 KB Output is correct
122 Correct 794 ms 28152 KB Output is correct
123 Correct 1052 ms 21288 KB Output is correct
124 Correct 1094 ms 16564 KB Output is correct
125 Correct 2158 ms 19672 KB Output is correct
126 Correct 2176 ms 19884 KB Output is correct
127 Correct 2147 ms 19648 KB Output is correct
128 Correct 2164 ms 19844 KB Output is correct
129 Correct 2179 ms 19564 KB Output is correct
130 Correct 2157 ms 19612 KB Output is correct
131 Correct 1048 ms 25696 KB Output is correct
132 Correct 1883 ms 40656 KB Output is correct
133 Runtime error 2077 ms 47516 KB Memory limit exceeded
134 Halted 0 ms 0 KB -