structbit { int tr[N], n; voidinit(int _n) { memset(tr, 0, sizeof tr); n = _n; } voidadd(int id, int x = 1) { for (int i = id; i <= n; i += (i & (-i))) tr[i] += x; } intquery(int id) { int ret = 0; for (int i = id; i; i -= (i & (-i))) ret += tr[i]; return ret; } } trl, trr;
while (cin >> n) { trl.init(1e5), trr.init(1e5); for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) { trl.add(a[i]); l[i] = trl.query(a[i] - 1); } for (int i = n; i > 0; i--) { trr.add(a[i]); r[i] = n - i - trr.query(a[i]) + 1; } int ans = 0; for (int i = 1; i <= n; i++) ans += l[i] * r[i]; cout << ans << endl; } }
#include<iostream> #include<algorithm> usingnamespace std; constint N = 5e5 + 5; int a[N], c[N], n;
inlineintlowbit(int x){ return x & (-x); }
inlinevoidadd(int id, int x){ for (int i = id;i <= n;i += lowbit(i)) c[i] += x; }
voidadd(int l, int r, int x){ add(l, x), add(r + 1, -x); }
inlineintquery(int id){ int ans = 0; for (int i = id;i > 0;i -= lowbit(i)) ans += c[i]; return ans; }
signedmain(){ int m; ios::sync_with_stdio(false); cin >> n >> m; for (int i = 1;i <= n;i++) cin >> a[i]; for (int i = 1;i <= n;i++) { if (i == 1) add(1, a[1]); elseadd(i, a[i] - a[i - 1]); // 差分 } for (int i = 1;i <= m;i++) { int op, x; cin >> op; if (op == 1) { int y, k; cin >> x >> y >> k; add(x, y, k); } else cin >> x, cout << query(x) << endl; } return0; }
#define lowbit(x) ((x)&(-(x))) #define int long long constint N = 1e6 + 5;
int a[N]; // 原数组 int b[N]; // 差分数组 int c[3][N], n; // 树状数组,c[1]维护b[i],c[2]维护i*b[i]
voidadd(int k, int id, int x){ for (int i = id;i <= n;i += lowbit(i)) c[k][i] += x; }
voidadd(int k, int l, int r, int x){ if (k == 1) add(k, l, x), add(k, r + 1, -x); elseadd(k, l, l * x), add(k, r + 1, -(r + 1) * x); }
intquery(int k, int id){ int ans = 0; if (k > 0) { for (int i = id;i;i -= lowbit(i)) ans += c[k][i]; return ans; } return (id + 1) * query(1, id) - query(2, id); }
intquery(int k, int l, int r){ returnquery(k, r) - query(k, l - 1); }
signedmain(){ ios::sync_with_stdio(0); #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); freopen("data.out", "w", stdout); #endif int q; cin >> n >> q; for (int i = 1;i <= n;i++) { cin >> a[i]; b[i] = a[i] - a[i - 1]; } for (int i = 1;i <= n;i++) { add(1, i, b[i]); add(2, i, i * b[i]); } while (q--) { int op; cin >> op; if (op == 1) { int l, r, x; cin >> l >> r >> x; add(1, l, r, x); add(2, l, r, x); } else { int l, r; cin >> l >> r; cout << query(0, l, r) << endl; } } return0; }