题目链接
#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5;
long long n, q, a[N];
struct S {
long long sum, minn, tag;
} tr[N * 4];
void pushup(long long x) {
tr[x].sum = tr[2 * x].sum + tr[2 * x + 1].sum;
tr[x].minn = min(tr[2 * x].minn, tr[2 * x + 1].minn);
}
void build (long long x, long long l, long long r) {
if (l == r) {
tr[x] = {0, a[l], 0};
return;
}
long long mid = (l + r) / 2;
build(2 * x, l, mid), build(2 * x + 1, mid + 1, r);
pushup(x);
}
void pushdown(long long x) {
tr[2 * x].tag += tr[x].tag;
tr[2 * x + 1].tag += tr[x].tag;
tr[2 * x].minn += tr[x].tag;
tr[2 * x + 1].minn += tr[x].tag;
tr[x].tag = 0;
}
void D(long long x, long long l, long long r, long long sx, long long ex, bool o) {
if (l == sx && r == ex) {
if (o) {
tr[x].minn--, tr[x].tag--;
}
if (tr[x].minn > 0) {
return;
}
if (l == r) {
tr[x].sum++, tr[x].minn = a[l];
return;
}
o = 0;
}
pushdown(x);
long long mid = (l + r) / 2;
if (sx <= mid) {
D(2 * x, l, mid, sx, min(mid, ex), o);
}
if (mid + 1 <= ex) {
D(2 * x + 1, mid + 1, r, max(mid + 1, sx), ex, o);
}
pushup(x);
}
long long E(long long x, long long l, long long r, long long sx, long long ex) {
if (l == sx && r == ex) {
return tr[x].sum;
}
pushdown(x);
long long mid = (l + r) / 2, ans = 0;
if (sx <= mid) {
ans += E(2 * x, l, mid, sx, min(mid, ex));
}
if (mid + 1 <= ex) {
ans += E(2 * x + 1, mid + 1, r, max(mid + 1, sx), ex);
}
return ans;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> q;
for (long long i = 1; i <= n; i++) {
cin >> a[i];
}
build(1, 1, n);
long long l, r;
for (string op; q--;) {
cin >> op >> l >> r;
if (op[0] == 'a') {
D(1, 1, n, l, r, 1);
} else {
cout << E(1, 1, n, l, r) << "\n";
}
}
return 0;
}