Submission #813156

#TimeUsernameProblemLanguageResultExecution timeMemory
813156SlavicGBubble Sort 2 (JOI18_bubblesort2)C++17
38 / 100
1174 ms118564 KiB
#include "bubblesort2.h" #include <bits/stdc++.h> using namespace std; #define ll int64_t const ll inf = 1e10; const int N = 4e6 + 5; ll t[4 * N], lazy[4 * N]; void push(int i, int l, int r) { if(!lazy[i]) return; t[i] += lazy[i]; if(l != r) { lazy[2 * i] += lazy[i]; lazy[2 * i + 1] += lazy[i]; } lazy[i] = 0; } void modif(int i, int l, int r, int tl, int tr, ll val) { push(i, l, r); if(l > tr || r < tl) return; if(l >= tl && r <= tr) { lazy[i] += val; push(i, l,r); return; } int mid = l + r >> 1; modif(2 * i, l, mid, tl, tr, val); modif(2 * i + 1, mid + 1, r, tl, tr, val); t[i] = max(t[2 * i], t[2 * i + 1]); } std::vector<int> countScans(vector<int> a, vector<int> X, vector<int> V){ int n = a.size(); int q = X.size(); vector<int> ans(q); vector<int> cnt(n, 0); vector<ll> c(n); vector<ll> vals; //compresam coordonatele si ne asiguram sa nu avem duplicate for(int i = 0; i < n; ++i) { vals.push_back(inf * (ll)a[i] + i); } for(int k = 0; k < q; ++k) { int i = X[k]; ll newval = inf * V[k] + i; vals.push_back(newval); } sort(vals.begin(), vals.end()); vals.erase(unique(vals.begin(), vals.end()), vals.end()); for(int i = 0; i < n; ++i) { a[i] = lower_bound(vals.begin(), vals.end(), (ll)a[i] * (ll)inf + i) - vals.begin(); } for(int k = 0; k < q; ++k) { int i = X[k]; ll newval = inf * V[k] + i; V[k] = lower_bound(vals.begin(), vals.end(), newval) - vals.begin(); } //acum rezolvam problema dupa ce am compresat tot for(int i = 0; i < N; ++i) modif(1, 0, N - 1, i, i, -inf); for(int i = 0; i < n; ++i) { modif(1, 0, N - 1, a[i], a[i], inf + i); } for(int i = 0; i < n; ++i) { modif(1, 0, N - 1, a[i] + 1, N - 1, -1); } for(int k = 0; k < q; ++k) { int i = X[k], newval = V[k]; modif(1, 0, N - 1, a[i] + 1, N - 1, +1); modif(1, 0, N - 1, a[i], a[i], -2 * inf - i); a[i] = newval; modif(1, 0, N - 1, a[i], a[i], inf + i); modif(1, 0, N - 1, a[i] + 1, N - 1, -1); ans[k] = t[1]; } return ans; } /* 4 2 1 2 3 4 0 3 2 1 */

Compilation message (stderr)

bubblesort2.cpp: In function 'void modif(int, int, int, int, int, int64_t)':
bubblesort2.cpp:27:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   27 |  int mid = l + r >> 1;
      |            ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...