Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
45095 | Ghost_Chris | 课堂检测 | C++ | 通过 | 100 | 210 MS | 1440 KB | 946 | 2022-02-14 14:03:24 |
#include <bits/stdc++.h> #define ll long long using namespace std; const int N(100010); int n,m,id[N],len; ll a[N],b[N],s[N]; void Add(int l,int r,ll x){ int sid(id[l]),eid(id[r]); if (sid == eid){ for (int i(l);i <= r;i++) a[i] += x,s[sid] += x; return ; } for (int i(l);id[i] == sid;i++) a[i] += x,s[sid] += x; for (int i(sid + 1);i < eid;i++) b[i] += x,s[i] += len * x; for (int i(r);id[i] == eid;i--) a[i] += x,s[eid] += x; return ; } ll Query(int l,int r){ int sid(id[l]),eid(id[r]); long long ans(0); for (int i(l);i <= r;i++) ans = ans + a[i] + b[sid]; return ans; } int main(){ cin >> n; len = sqrt(n); for (int i(1);i <= n;i++){ cin >> a[i]; id[i] = (i - 1) / len + 1; s[id[i]] += a[i]; } cin >> m; for (short opt;m--;){ cin >> opt; int l,r,c; if (opt == 1) {cin >> l >> r >> c;Add(l,r,c);} else {cin >> l;cout << Query(l,l) << endl;} } return 0; }