昨天太晚了,没写博客,今日补写
昨天学数据结构
堆直接全用优先队列偷懒
树状大同小异,但我没看懂,学了一会儿
RMQ直接炸掉
随便弄题简单题代码过来
#include
#define ll long long
using namespace std;
const int L = 1e6 + 10;
ll s_first[L], s_second[L], a[L];
int n, q;
int lowbit(int x) { return x & (-x); }
void add(int x, ll y) {
for (int i = x; i <= n; i += lowbit(i)) {
s_first[i] += y;
s_second[i] += (x - 1) * y;
}
}
ll get(int x) {
ll r = 0;
for (int i = x; i; i -= lowbit(i)) {
r += x * s_first[i] - s_second[i];
}
return r;
}
int main(void) {
scanf("%d %d", &n, &q);
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
add(i, a[i] - a[i - 1]);
}
while (q--) {
int innum, l, r, x;
scanf("%d", &innum);
if (innum == 1) {
scanf("%d %d %d", &l, &r, &x);
add(l, x);
add(r + 1, -x);
} else {
scanf("%d %d", &l, &r);
printf("%lld\n", get(r) - get(l - 1));
}
}
return 0;
}
其实不难,理解一下即可
时间如白驹过隙,在空气甚是香甜的“长了”的时间过了50%
过去属于死神,未来属于自己。