Submission #408920

#TimeUsernameProblemLanguageResultExecution timeMemory
408920dooweyBubble Sort 2 (JOI18_bubblesort2)C++14
100 / 100
4288 ms61752 KiB
#include <bits/stdc++.h> #include "bubblesort2.h" using namespace std; typedef long long ll; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair const int N = (int)5e5 + 10; const int M = N * 2; const int inf = (int)1e9; struct Node{ int maxi; int cnt; int lzy; }; vector<pii> cmp; Node T[M * 4 + 512]; void push(int node, int cl, int cr){ T[node].maxi -= T[node].lzy; T[node].cnt += T[node].lzy; if(cl != cr){ T[node * 2].lzy += T[node].lzy; T[node * 2 + 1].lzy += T[node].lzy; } T[node].lzy = 0; } void set_val(int node, int cl, int cr, int id, int v){ push(node, cl, cr); if(cl > id || cr < id) return; if(cl == cr){ T[node].maxi = v; return; } int mid = (cl + cr) / 2; set_val(node * 2, cl, mid, id, v); set_val(node * 2 + 1, mid + 1, cr, id, v); T[node].maxi = max(T[node * 2].maxi, T[node * 2 + 1].maxi); } void incr(int node, int cl, int cr, int tl, int tr, int v){ push(node, cl, cr); if(cr < tl || cl > tr) return; if(cl >= tl && cr <= tr){ T[node].lzy = v; push(node, cl, cr); return; } int mid = (cl + cr) / 2; incr(node * 2, cl, mid, tl, tr, v); incr(node * 2 + 1, mid + 1, cr, tl, tr, v); T[node].maxi = max(T[node * 2].maxi, T[node * 2 + 1].maxi); } int get(int node, int cl, int cr, int tl, int tr){ push(node, cl, cr); if(cr < tl) return 0; if(cl > tr) return 0; if(cl >= tl && cr <= tr){ return T[node].cnt; } int mid = (cl + cr) / 2; return get(node * 2, cl, mid, tl, tr) + get(node * 2 + 1, mid + 1, cr, tl, tr); } void build(int node, int cl, int cr){ T[node].maxi = -inf; if(cl == cr){ return; } int mid = (cl + cr) / 2; build(node * 2, cl, mid); build(node * 2 + 1, mid + 1, cr); } vector<int> countScans(vector<int> A, vector<int> X, vector<int> V){ vector<int> outp; int n = A.size(); int q = X.size(); int sol; for(int i = 0 ; i < n; i ++ ){ cmp.push_back(mp(A[i], i)); } for(int iq = 0; iq < q; iq ++ ){ cmp.push_back(mp(V[iq], X[iq])); } sort(cmp.begin(), cmp.end()); cmp.resize(unique(cmp.begin(), cmp.end()) - cmp.begin()); int m = cmp.size(); build(1, 0, m - 1); int idx; for(int i = 0 ; i < n; i ++ ){ idx = lower_bound(cmp.begin(), cmp.end(), mp(A[i], i)) - cmp.begin(); incr(1, 0, m - 1, idx + 1, m - 1, +1); } int vv; for(int i = 0 ; i < n; i ++ ){ idx = lower_bound(cmp.begin(), cmp.end(), mp(A[i], i)) - cmp.begin(); vv = get(1, 0, m - 1, idx, idx); set_val(1, 0, m - 1, idx, i - vv); } for(int iq = 0; iq < q; iq ++ ){ idx = lower_bound(cmp.begin(), cmp.end(), mp(A[X[iq]], X[iq])) - cmp.begin(); vv = get(1, 0, m - 1, idx, idx); set_val(1, 0, m - 1, idx, -inf); incr(1, 0, m - 1, idx + 1, m - 1, -1); A[X[iq]] = V[iq]; idx = lower_bound(cmp.begin(), cmp.end(), mp(A[X[iq]], X[iq])) - cmp.begin(); vv = get(1, 0, m - 1, idx, idx); set_val(1, 0, m - 1, idx, X[iq] - vv); incr(1, 0, m - 1, idx + 1, m - 1, +1); outp.push_back(T[1].maxi); } return outp; }

Compilation message (stderr)

bubblesort2.cpp: In function 'std::vector<int> countScans(std::vector<int>, std::vector<int>, std::vector<int>)':
bubblesort2.cpp:89:9: warning: unused variable 'sol' [-Wunused-variable]
   89 |     int sol;
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...