Submission #204178

#TimeUsernameProblemLanguageResultExecution timeMemory
204178DS007Bubble Sort 2 (JOI18_bubblesort2)C++14
60 / 100
5175 ms180428 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e6; map<int, int> m; int t[N * 8], lazy[N * 8]; multiset<int> pos[N]; void push_down(int v) { t[v] += lazy[v]; lazy[v * 2] += lazy[v]; lazy[v * 2 + 1] += lazy[v]; lazy[v] = 0; } void update(int v, int l, int r, int tl, int tr, int val) { if (tl > tr) return; push_down(v); push_down(v * 2); push_down(v * 2 + 1); if (l == tl && r == tr) { lazy[v] += val; push_down(v); return; } int mid = (l + r) / 2; update(v * 2, l, mid, tl, min(mid, tr), val); update(v * 2 + 1, mid + 1, r, max(tl, mid + 1), tr, val); t[v] = max(t[v * 2], t[v * 2 + 1]); } void add(int e, int i) { update(1, 0, N - 1, e, N - 1, -1); int dif = pos[e].empty() ? 0 : *pos[e].rbegin(); pos[e].insert(i); dif = *pos[e].rbegin() - dif; update(1, 0, N - 1, e, e, dif); } void remove(int e, int i) { update(1, 0, N - 1, e, N - 1, 1); int dif = *pos[e].rbegin(); pos[e].erase(i); dif = pos[e].empty() ? -dif : *pos[e].rbegin() - dif; update(1, 0, N - 1, e, e, dif); } vector<int> countScans(vector<int> a, vector<int> x, vector<int> v) { for (auto &i : a) m[i] = 0; for (auto &i : v) m[i] = 0; int cur = 0; for (auto &i : m) i.second = cur++; for (int i = 0; i < a.size(); i++) { a[i] = m[a[i]]; add(a[i], i + 1); } vector<int> ans; for (int i = 0; i < x.size(); i++) { v[i] = m[v[i]]; remove(a[x[i]], x[i] + 1); add(v[i], x[i] + 1); a[x[i]] = v[i]; ans.push_back(t[1]); // cout << t[1] << "\n"; } return ans; } /*signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); countScans({1, 2, 3, 4}, {0, 2}, {3, 1}); }*/

Compilation message (stderr)

bubblesort2.cpp: In function 'std::vector<int> countScans(std::vector<int>, std::vector<int>, std::vector<int>)':
bubblesort2.cpp:54:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < a.size(); i++) {
                     ~~^~~~~~~~~~
bubblesort2.cpp:60:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < x.size(); i++) {
                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...