제출 #1156639

#제출 시각아이디문제언어결과실행 시간메모리
1156639njoopBubble Sort 2 (JOI18_bubblesort2)C++20
100 / 100
3620 ms104204 KiB
//#include "bubblesort2.h" #include <bits/stdc++.h> using namespace std; map<pair<int, int>, int> mp; const int inf = 1e9+7; 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 -inf; 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(), idx, oidx; vector<int> answer(q); vector<pair<int, int>> vec; st seg; seg.init(); for(int i=0; i<n; i++) { vec.push_back({a[i], i}); } for(int i=0; i<q; i++) { vec.push_back({v[i], x[i]}); } sort(vec.begin(), vec.end()); vec.erase(unique(vec.begin(), vec.end()), 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], i}]; seg.update(1, n+q, idx, idx, i+1, 1); seg.update(1, n+q, idx, n+q, -1, 1); } for(int i=0; i<q; i++) { idx = mp[{v[i], x[i]}]; oidx = mp[{a[x[i]], x[i]}]; seg.update(1, n+q, oidx, oidx, -x[i]-1, 1); seg.update(1, n+q, oidx, n+q, 1, 1); seg.update(1, n+q, idx, idx, x[i]+1, 1); seg.update(1, n+q, idx, n+q, -1, 1); a[x[i]] = v[i]; 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...