Submission #1156597

#TimeUsernameProblemLanguageResultExecution timeMemory
1156597njoopBubble Sort 2 (JOI18_bubblesort2)C++20
0 / 100
27 ms21572 KiB
//#include "bubblesort2.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define ordered_set tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set s; map<int, int> mp; struct st { vector<int> seg, lazy; void init() { seg.assign(2500010, 0); lazy.assign(2500010, 0); } void push(int l, int r, int node) { if(lazy[node] != 0) { seg[node] += lazy[node]; if(l != r) { lazy[node*2] += lazy[node]; lazy[node*2+1] += lazy[node]; } lazy[node] = 0; } } void update(int l, int r, int idl, int idr, int val, int node) { push(l, r, node); if(l > idr || r < idl) return; if(l >= idl && r <= idr) { seg[node] += val; if(l != r) { lazy[node*2] += val; lazy[node*2+1] += val; } return; } int mid = l + (r-l)/2; update(l, mid, idl, idr, val, node*2); update(mid+1, r, idl, idr, val, node*2+1); seg[node] = max(seg[node*2], seg[node*2+1]); } int query(int l, int r, int ql, int qr, int node) { push(l, r, node); if(l > qr || r < ql) return 0; if(l >= ql && r <= qr) return seg[node]; int mid = l+(r-l)/2; return max(query(l, mid, ql, qr, node*2), query(mid+1, r, ql, qr, node*2+1)); } }; vector<int> countScans(vector<int> a, vector<int> x, vector<int> v){ int q=x.size(), n=a.size(), val, idx, oidx; vector<int> answer(q), vec; st seg; seg.init(); for(int i=0; i<n; i++) { vec.push_back(a[i]); s.insert(a[i]); } for(int i=0; i<q; i++) { vec.push_back(v[i]); } sort(vec.begin(), vec.end()); unique(vec.begin(), vec.end()); for(int i=0; i<vec.size(); i++) { mp[vec[i]] = i+1; } for(int i=0; i<n; i++) { idx = mp[a[i]]; val = i-s.order_of_key(a[i]); seg.update(1, n+q, idx, idx, val, 1); } for(int i=0; i<q; i++) { idx = mp[v[i]]; oidx = mp[a[x[i]]]; s.erase(s.find(a[x[i]])); s.insert(v[i]); a[x[i]] = v[i]; if(oidx < idx) { seg.update(1, n+q, oidx, idx, 1, 1); } else { seg.update(1, n+q, idx, oidx, -1, 1); } val = seg.query(1, n+q, oidx, oidx, 1); seg.update(1, n+q, oidx, oidx, -val, 1); val = x[i]-s.order_of_key(v[i]) - seg.query(1, n+q, idx, idx, 1); seg.update(1, n+q, idx, idx, val, 1); answer[i] = seg.query(1, n+q, 1, n+q, 1); } return answer; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...