Submission #1315666

#TimeUsernameProblemLanguageResultExecution timeMemory
1315666nguyenkhangninh99Bubble Sort Machine (JOI25_bubble)C++20
100 / 100
606 ms73500 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn = 5e5 + 5; int bit1[maxn], bit2[maxn], ans[maxn]; vector<array<int, 3>> at[maxn]; vector<int> compress; void add(int p, int v){ for(; p < maxn; p += p & -p) bit1[p]++, bit2[p] += v; } int get(int k){ int pos = 0, cnt = 0, sum = 0; for(int i = 19; i >= 0; i--){ if(pos + (1 << i) < compress.size() && cnt + bit1[pos + (1 << i)] <= k){ pos += (1 << i); cnt += bit1[pos]; sum += bit2[pos]; } } return sum + (k - cnt) * compress[pos]; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; vector<int> a(n + 1); for(int i = 1; i <= n; i++) cin >> a[i]; for(int i = 1; i <= n; i++) compress.push_back(a[i]); sort(compress.begin(), compress.end()); compress.erase(unique(compress.begin(), compress.end()), compress.end()); int q; cin >> q; int cnt1 = 0, id = 0; while (q--){ int type; cin >> type; if(type == 1) cnt1++; else{ int l, r; cin >> l >> r; at[min(n, l - 1 + cnt1)].push_back({l - 1, id, -1}); at[min(n, r + cnt1)].push_back({r, id, 1}); id++; } } for(int i = 1; i <= n; i++){ add(lower_bound(compress.begin(), compress.end(), a[i]) - compress.begin() + 1, a[i]); for(auto [k, id, sign]: at[i]) ans[id] += sign * get(k); } for(int i = 0; i < id; i++) cout << ans[i] << "\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...