Submission #1271320

#TimeUsernameProblemLanguageResultExecution timeMemory
1271320model_codeBubble Sort Machine (JOI25_bubble)C++20
100 / 100
516 ms71560 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; struct T { ll cnt, sum; T operator+(T other) { return T{cnt + other.cnt, sum + other.sum}; }; }; int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); ll N; cin >> N; vector<int> A(N); for (int i = 0; i < N; ++i) cin >> A[i]; // (query index, n, sgn) vector<vector<tuple<ll, ll, ll>>> query(N + 1); ll Q; cin >> Q; ll op = 0; vector<ll> ANS; for (int q = 0; q < Q; ++q) { ll t; cin >> t; if (t == 1) ++op; if (t == 2) { ll L, R; cin >> L >> R; --L; ll idx = ANS.size(); ANS.push_back(0); query[min(op + L, N)].push_back(make_tuple(idx, L, -1)); query[min(op + R, N)].push_back(make_tuple(idx, R, +1)); } } // index compress vector<int> I(N); for (int i = 0; i < N; ++i) I[i] = i; sort(I.begin(), I.end(), [&](int i, int j) -> bool { return A[i] < A[j]; }); vector<int> rank(N); for (int i = 0; i < N; ++i) rank[I[i]] = i; vector<T> bit(N + 1); for (int n = 0; n <= N; ++n) { for (auto &[idx, m, sgn]: query[n]) { ll cnt = 0, sm = 0; ll p = 0; // binary search on Fenciwk Tree for (int i = 20; i >= 0; --i) { if (p + (1 << i) > N) continue; auto [c, s] = bit[p + (1 << i)]; if (cnt + c > m) continue; cnt += c, sm += s, p += 1 << i; } ANS[idx] += sm * sgn; } if (n == N) break; int i = rank[n]; // add to Fenwick Tree ++i; T t = {1, A[n]}; while (i <= N) { bit[i] = bit[i] + t; i += i & (-i); } } for (ll x: ANS) cout << x << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...