Submission #69864215
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
#define int long long
using ll = long long;
const int N = 3e5 + 10;
int n;
ll a[N];
int q;
struct tree{
ll t[4*N], ze[4*N];
ll tag[4*N];
void pushup(int p) {
t[p] = min(t[p * 2], t[p * 2 + 1]);
ze[p] = ze[p * 2] + ze[p * 2 + 1];
}
void pushdown(int p) {
if (tag[p]) {
t[p * 2] -= tag[p];
t[p * 2 + 1] -= tag[p];
tag[p * 2] += tag[p];
tag[p * 2 + 1] += tag[p];
tag[p] = 0;
}
}
void build(int p, int l, int r) {
if (l == r) {
t[p] = a[l];
return;
}
int mid = (l + r) / 2;
build(p * 2, l, mid);
build(p * 2 + 1, mid + 1, r);
pushup(p);
}
void update(int p, int l, int r, int L, int R, int k) {
if (L <= l && r <= R) {
tag[p] += k;
t[p] -= k;
return;
}
int mid = (l + r) / 2;
pushdown(p);
if (L <= mid) update(p * 2, l, mid, L, R, k);
if (R > mid) update(p * 2 + 1, mid + 1, r, L, R, k);
pushup(p);
}
pair<int, ll> query_fir(int p, int l, int r, int L, int R, int k) {
if (t[p] >= k) {
return {-1, -1};
}
if (l == r) {
return {l, t[p]};
}
int mid = (l + r) / 2;
pushdown(p);
if (L <= mid) {
auto t = query_fir(p * 2, l, mid, L, R, k);
if (t != (pair<int,ll>){-1, -1}) return t;
}
if (R > mid) {
auto t = query_fir(p * 2 + 1, mid + 1, r, L, R, k);
if (t != (pair<int,ll>){-1, -1}) return t;
}
return {-1, -1};
}
void chg(int p, int l ,int r, int pos) {
// cerr << "chg" << l << ' ' << r << ' ' << t[p] << '\n';
if (l == r) {
// cerr << "chggg" << l << ' ' << r << ' ' << t[p] << '\n';
t[p] = 1e18;
ze[p] = 1;
return;
}
int mid = (l + r) / 2;
pushdown(p);
if (pos <= mid) chg(p * 2, l, mid, pos);
else chg(p * 2 + 1, mid + 1, r, pos);
pushup(p);
}
int getze(int p, int l, int r, int L, int R) {
if (L <= l && r <= R) {
return ze[p];
}
int mid = (l + r) / 2;
pushdown(p);
int s = 0;
if (L <= mid) s += getze(p * 2, l, mid, L, R);
if (R > mid) s += getze(p * 2 + 1, mid + 1, r, L, R);
// pushup(p);
return s;
}
};
tree T;
signed main() {
ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
T.build(1, 1, n);
// cerr << T.query_fir(1, 1, n, 2, 5, 5).first << '\n';
cin >> q;
while (q--) {
int l, r, k;
cin >> l >> r >> k;
// cerr << "process" << l << ' ' << r << ' ' << k << '\n';
ll tt = r - l + 1 - T.getze(1, 1, n, l, r);
long long s = 0;
pair<int, ll> tp = T.query_fir(1, 1, n, l, r, k);
while (tp != (pair<int,ll>){-1, -1}) {
// cerr << "detect" << tp.first << ' ' << tp.second << '\n';
s += tp.second;
T.chg(1, 1, n, tp.first);
tt--;
tp = T.query_fir(1, 1, n, l, r, k);
}
cout << 1ll * tt * k + s << '\n';
T.update(1, 1, n, l, r, k);
}
return 0;
}
Submission Info
| Submission Time |
|
| Task |
F - Clearance |
| User |
Nicrobott |
| Language |
C++ 20 (gcc 12.2) |
| Score |
525 |
| Code Size |
3544 Byte |
| Status |
AC |
| Exec Time |
1499 ms |
| Memory |
31888 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
525 / 525 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_01.txt |
| All |
sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt |
| Case Name |
Status |
Exec Time |
Memory |
| sample_01.txt |
AC |
1 ms |
3500 KiB |
| test_01.txt |
AC |
1 ms |
3488 KiB |
| test_02.txt |
AC |
1 ms |
3448 KiB |
| test_03.txt |
AC |
1 ms |
3496 KiB |
| test_04.txt |
AC |
416 ms |
3732 KiB |
| test_05.txt |
AC |
394 ms |
3496 KiB |
| test_06.txt |
AC |
578 ms |
3496 KiB |
| test_07.txt |
AC |
1057 ms |
30556 KiB |
| test_08.txt |
AC |
1346 ms |
30372 KiB |
| test_09.txt |
AC |
1499 ms |
30404 KiB |
| test_10.txt |
AC |
1256 ms |
31564 KiB |
| test_11.txt |
AC |
1295 ms |
31888 KiB |
| test_12.txt |
AC |
1391 ms |
30660 KiB |
| test_13.txt |
AC |
814 ms |
31848 KiB |
| test_14.txt |
AC |
836 ms |
31884 KiB |
| test_15.txt |
AC |
782 ms |
31820 KiB |
| test_16.txt |
AC |
786 ms |
30412 KiB |
| test_17.txt |
AC |
790 ms |
30452 KiB |
| test_18.txt |
AC |
828 ms |
30456 KiB |
| test_19.txt |
AC |
1292 ms |
30480 KiB |
| test_20.txt |
AC |
1232 ms |
30476 KiB |
| test_21.txt |
AC |
766 ms |
30480 KiB |
| test_22.txt |
AC |
542 ms |
30340 KiB |
| test_23.txt |
AC |
538 ms |
30412 KiB |
| test_24.txt |
AC |
540 ms |
30400 KiB |
| test_25.txt |
AC |
541 ms |
30304 KiB |
| test_26.txt |
AC |
564 ms |
31608 KiB |
| test_27.txt |
AC |
551 ms |
31356 KiB |
| test_28.txt |
AC |
583 ms |
31756 KiB |
| test_29.txt |
AC |
587 ms |
31820 KiB |
| test_30.txt |
AC |
508 ms |
31764 KiB |
| test_31.txt |
AC |
488 ms |
31644 KiB |
| test_32.txt |
AC |
842 ms |
31772 KiB |
| test_33.txt |
AC |
839 ms |
31832 KiB |
| test_34.txt |
AC |
836 ms |
31748 KiB |
| test_35.txt |
AC |
832 ms |
31844 KiB |
| test_36.txt |
AC |
839 ms |
31800 KiB |
| test_37.txt |
AC |
833 ms |
31760 KiB |