제출 #1264239

#제출 시각아이디문제언어결과실행 시간메모리
1264239tvgkBubble Sort 2 (JOI18_bubblesort2)C++20
100 / 100
1654 ms46228 KiB
#include "bubblesort2.h" #include<bits/stdc++.h> using namespace std; #define task "a" #define se second #define fi first #define ll long long #define ii pair<ll, ll> const long mxN = 5e5 + 7; int tree[mxN * 8], lazy[mxN * 8]; vector<ii> val; void Down(int j) { tree[j * 2] += lazy[j]; lazy[j * 2] += lazy[j]; tree[j * 2 + 1] += lazy[j]; lazy[j * 2 + 1] += lazy[j]; lazy[j] = 0; } void Upd(int u, int v, int inc, int j = 1, int l = 0, int r = val.size() - 1) { if (u > r || l > v) return; if (u <= l && r <= v) { tree[j] += inc; lazy[j] += inc; return; } Down(j); int mid = (l + r) / 2; Upd(u, v, inc, j * 2, l, mid); Upd(u, v, inc, j * 2 + 1, mid + 1, r); tree[j] = max(tree[j * 2], tree[j * 2 + 1]); } vector<int> countScans(vector<int> A, vector<int> X, vector<int> V) { for (int i = 0; i < A.size(); i++) val.push_back({A[i], i}); for (int i = 0; i < X.size(); i++) val.push_back({V[i], X[i]}); sort(val.begin(), val.end()); val.erase(unique(val.begin(), val.end()), val.end()); for (int i = 0; i < A.size(); i++) { int j = lower_bound(val.begin(), val.end(), ii(A[i], i)) - val.begin(); Upd(j, j, i); Upd(j + 1, val.size(), -1); } vector<int> answer(X.size()); for (int i = 0; i < X.size(); i++) { int j = lower_bound(val.begin(), val.end(), ii(A[X[i]], X[i])) - val.begin(); Upd(j, j, -X[i]); Upd(j + 1, val.size(), 1); A[X[i]] = V[i]; j = lower_bound(val.begin(), val.end(), ii(A[X[i]], X[i])) - val.begin(); Upd(j, j, X[i]); Upd(j + 1, val.size(), -1); answer[i] = tree[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...