#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, m;
long long a[N];
struct Seg {
long long mi, sum;
long long laz;
Seg () {sum = laz = 0LL; mi = LONG_LONG_MAX;}
} tree[N << 2];
void pushup (int node) {
int ls = node << 1, rs = (node << 1) + 1;
tree[node].mi = min (tree[ls].mi, tree[rs].mi);
tree[node].sum = tree[ls].sum + tree[rs].sum;
}
void pushdown (int node, int l, int r) {
int ls = node << 1, rs = (node << 1) + 1, mid = l + ((r - l) >> 1);
if (tree[node].laz) {
int x = tree[node].laz;
tree[ls].mi += x; tree[rs].mi += x;
tree[ls].sum += (mid - l + 1) * x; tree[rs].sum += (r - mid) * x;
tree[ls].laz += x; tree[rs].laz += x;
tree[node].laz = 0;
}
}
void build (int node, int l, int r) {
if (l == r) {
tree[node].sum = tree[node].mi = a[l];
return ;
}
int mid = l + ((r - l) >> 1);
build (node << 1, l, mid);
build ((node << 1) + 1, mid + 1, r);
pushup (node);
}
void modify (int node, int l, int r, int s, int t, long long c) {
if (s <= l && r <= t) {
tree[node].sum += (r - l + 1) * c;
tree[node].mi += c;
tree[node].laz += c;
return ;
}
pushdown (node, l, r);
int mid = l + ((r - l) >> 1);
if (s <= mid) modify (node << 1, l, mid, s, t, c);
if (t > mid) modify ((node << 1) + 1, mid + 1, r, s, t, c);
pushup (node);
}
long long querys (int node, int l, int r, int s, int t) {
if (s <= l && r <= t) return tree[node].sum;
pushdown (node, l, r);
int mid = l + ((r - l) >> 1);
long long ret = 0;
if (s <= mid) ret += querys (node << 1, l, mid, s, t);
if (t > mid) ret += querys ((node << 1) + 1, mid + 1, r, s, t);
return ret;
}
long long querym (int node, int l, int r, int s, int t) {
if (s <= l && r <= t) return tree[node].mi;
pushdown (node, l, r);
int mid = l + ((r - l) >> 1);
long long ret = LONG_LONG_MAX;
if (s <= mid) ret = min (ret, querym (node << 1, l, mid, s, t));
if (t > mid) ret = min (ret, querym ((node << 1) + 1, mid + 1, r, s, t));
return ret;
}
int main () {
ios::sync_with_stdio (false);
cin.tie (0); cout.tie (0);
cin >> n >> m;
for (int i = 1; i <= n; ++i) cin >> a[i];
build (1, 1, n);
while (m--) {
char opt;
int x, y;
cin >> opt >> x >> y;
if (opt == 'P') {
long long v;
cin >> v;
modify (1, 1, n, x, y, v);
} else if (opt == 'M') cout << querym (1, 1, n, x, y) << '\n';
else cout << querys (1, 1, n, x, y) << '\n';
}
return 0;
}
rt, 开了 long long 并且空间开大了,依然只有 #1#3#4 AC,其他点 WA。