Submission #488962

#TimeUsernameProblemLanguageResultExecution timeMemory
488962keta_tsimakuridzeSegments (IZhO18_segments)C++14
15 / 100
659 ms6584 KiB
#include<bits/stdc++.h> #define f first #define s second #define pii pair<int,int> using namespace std; const int N = 2e5 + 5, mod = 1e9 + 7; // ! int t, block[N], le[N], ri[N], mink[N], Bl = 1500 ; vector<pii> all, cur, L[205], R[205]; void insert(int l,int r,int id) { cur.push_back({r - l + 1, id}); block[id] = -1; if(cur.size() == Bl) { for(int j = 0; j < cur.size(); j++) all.push_back(cur[j]); cur.clear(); sort(all.rbegin(), all.rend()); for(int j = 0; j <= (all.size())/Bl; j++) L[j].clear(), R[j].clear(); for(int j = 0; j < all.size(); j++) { int bl = j / Bl; L[bl].push_back({le[all[j].s], all[j].s}); R[bl].push_back({ri[all[j].s], all[j].s}); block[all[j].s] = bl; } for(int i = 0; i <= (all.size())/Bl; i++) { sort(L[i].begin(), L[i].end()); mink[i] = 2e9 + 33; for(int k = 0; k < L[i].size(); k++) mink[i] = min(mink[i], ri[L[i][k].s] - le[L[i][k].s] + 1); sort(R[i].begin(), R[i].end()); } } } vector<pii> erase(vector<pii> cur, int id) { vector<pii> new_; for(int i = 0; i < cur.size(); i++) { if(cur[i].s != id) new_.push_back(cur[i]); } return new_; } void remove(int id) { if(block[id] == -1) { cur = erase(cur, id); return; } L[block[id]] = erase(L[block[id]], id); R[block[id]] = erase(R[block[id]], id); return; } int get(int l,int r,int k) { if(r - l + 1 < k) return 0; int cnt = 0; for(int i = 0; i < cur.size(); i++) { int id = cur[i].s; if(min(ri[id], r) - max(le[id],l) + 1 >= k) cnt++; } for(int j = 0; j <= (all.size()) / Bl; j++) { if(!L[j].size()) continue; if(mink[j] >= k) { pii p; cnt += L[j].size(); p = {r - k + 1, 1e7}; cnt -= L[j].size() - (upper_bound(L[j].begin(), L[j].end(), p) - L[j].begin()); p = {l + k - 1, -1}; cnt -= (upper_bound(R[j].begin(), R[j].end(), p) - R[j].begin()) ; } else { for(int i = 0; i < L[j].size(); i++) { int id = L[j][i].s; if(min(ri[id], r) - max(le[id],l) + 1 >= k) cnt++; } break; } } //if((r - l + 1) == k) return cnt/2; return cnt; } int get(int x,int xo) { x = x ^ (t * xo); return x; } main() { ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0); #define endl " " int n; cin >> n >> t; int xo = 0, idx = -1; for(int i = 1; i <= n; i++) { int type; cin >> type; if(type == 1) { int l,r; cin >> l >> r; le[++idx] = l; ri[idx] = r; l = get(l, xo), r = get(r, xo); if(l >= r) swap(l, r); insert(l,r,idx); } else if(type == 2) { int id; cin >> id; remove(id - 1); } else { int l,r,k; cin >> l >> r >> k; l = get(l, xo), r = get(r, xo); if(l > r) swap(l, r); xo = get(l,r,k); cout << xo << endl; } } }

Compilation message (stderr)

segments.cpp: In function 'void insert(int, int, int)':
segments.cpp:12:16: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   12 |  if(cur.size() == Bl) {
      |     ~~~~~~~~~~~^~~~~
segments.cpp:13:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |   for(int j = 0; j < cur.size(); j++) all.push_back(cur[j]);
      |                  ~~^~~~~~~~~~~~
segments.cpp:16:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |   for(int j = 0; j <= (all.size())/Bl; j++) L[j].clear(), R[j].clear();
      |                  ~~^~~~~~~~~~~~~~~~~~
segments.cpp:17:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |   for(int j = 0; j < all.size(); j++) {
      |                  ~~^~~~~~~~~~~~
segments.cpp:23:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |   for(int i = 0; i <= (all.size())/Bl; i++) {
      |                  ~~^~~~~~~~~~~~~~~~~~
segments.cpp:26:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |    for(int k = 0; k < L[i].size(); k++) mink[i] = min(mink[i], ri[L[i][k].s] - le[L[i][k].s] + 1);
      |                   ~~^~~~~~~~~~~~~
segments.cpp: In function 'std::vector<std::pair<int, int> > erase(std::vector<std::pair<int, int> >, int)':
segments.cpp:33:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |   for(int i = 0; i < cur.size(); i++) {
      |                  ~~^~~~~~~~~~~~
segments.cpp: In function 'int get(int, int, int)':
segments.cpp:50:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |  for(int i = 0; i < cur.size(); i++) {
      |                 ~~^~~~~~~~~~~~
segments.cpp:54:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |  for(int j = 0; j <= (all.size()) / Bl; j++) {
      |                 ~~^~~~~~~~~~~~~~~~~~~~
segments.cpp:65:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |    for(int i = 0; i < L[j].size(); i++) {
      |                   ~~^~~~~~~~~~~~~
segments.cpp: At global scope:
segments.cpp:79:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   79 | main() {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...