HDU - 4348 To the moon
生活随笔
收集整理的這篇文章主要介紹了
HDU - 4348 To the moon
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
長度為N的序列,初始時間戳為0,有M次操作。
C l r d:代表區(qū)間[l, r]的數(shù)加d,當(dāng)前時間戳加1.
Q l r:代表輸出當(dāng)前時間戳內(nèi)[l, r]的區(qū)間和.
H l r t:代表輸出時間戳為t時[l, r]的區(qū)間和.
B t:代表把時間戳置為t.
題解:
先初始化一棵帶lazy線段樹,之后就是主席樹的做法,查詢就是線段樹區(qū)間求和操作。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int maxn = 1e5+10; typedef long long ll; int n, m; int w[maxn]; int tot, tim; int root[maxn]; int l, r, t; char s[5]; struct node {int l, r, lazy;ll sum; }tre[maxn*40]; void build(int l, int r, int &x) {x = ++tot;tre[x].lazy = 0;if(l==r) {scanf("%lld", &tre[x].sum);return ;}int mid = l+r>>1;build(l, mid, tre[x].l);build(mid+1, r, tre[x].r);tre[x].sum = tre[tre[x].l].sum+tre[tre[x].r].sum;return ; } void update(int l, int r, int &x, int y, int ql, int qr, int val) {tre[++tot] = tre[y];tre[tot].sum += 1ll*(qr-ql+1)*val;x = tot;if(l==ql&&qr==r) {tre[x].lazy += val;return ;}int mid = l+r>>1;if(qr<=mid) update(l, mid, tre[x].l, tre[y].l, ql, qr, val);else if(ql>mid) update(mid+1, r, tre[x].r, tre[y].r, ql, qr, val);else {update(l, mid, tre[x].l, tre[y].l, ql, mid, val);update(mid+1, r, tre[x].r, tre[y].r, mid+1, qr, val);} } ll query(int l, int r, int x, int ql, int qr) {if(ql==l&&qr==r) return tre[x].sum;int mid = l+r>>1;ll res = 1ll*(qr-ql+1)*tre[x].lazy;if(qr<=mid) res += query(l, mid, tre[x].l, ql, qr);else if(ql>mid) res += query(mid+1, r, tre[x].r, ql, qr);else res += query(l, mid, tre[x].l, ql, mid)+query(mid+1, r, tre[x].r, mid+1, qr);return res; } int main() {int f = 0;while(~scanf("%d%d", &n, &m)) {if(f) puts("");f++;tim = tot = 0;build(1, n, root[0]);for(int i = 1; i <= m; i++) {scanf("%s", s);if(s[0]=='C') scanf("%d%d%d", &l, &r, &t), update(1, n, root[++tim], root[tim-1], l, r, t);if(s[0]=='Q') scanf("%d%d", &l, &r), printf("%lld\n", query(1, n, root[tim], l, r));if(s[0]=='H') scanf("%d%d%d", &l, &r, &t), printf("%lld\n", query(1, n, root[t], l, r));if(s[0]=='B') scanf("%d", &tim);}} } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/Pneuis/p/8993014.html
總結(jié)
以上是生活随笔為你收集整理的HDU - 4348 To the moon的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 58同城沈剑:好的架构是进化来的,不是设
- 下一篇: LightOJ 1370 - Bi-sh