傳送門
維護乙個數列,要求支援區間加、區間乘以及查詢操作。
很裸的線段樹,難點在於加法和乘法的操作順序。
標記下傳時應先打乘法標記,再打加法標記,同時更新時還要用乘法標記維護加法標記。
#include
typedef long long ll;
const int n=100005;
int n,p,m,x,y,z,cmd,a[n],sum[n<<2],add[n<<2],tag[n<<2];
void read(int &x)
void up(int o)
void down(int o,int l,int r)
if(add[o])
}void build(int o,int l,int r)
int mid=l+r>>1;
build(o<<1,l,mid),build(o<<1|1,mid+1,r);
tag[o]=1;
up(o);
}void update(int o,int l,int r,int ql,int qr,int c,int
q) return;
}int mid=l+r>>1;
if(ql<=mid) update(o<<1,l,mid,ql,qr,c,q);
if(qr>mid) update(o<<1|1,mid+1,r,ql,qr,c,q);
up(o);
}int query(int o,int l,int r,int ql,int qr)
int main()else
if(cmd==2)else
printf("%d\n",query(1,1,n,x,y));
}return
0;}
BZOJ 1798 維護序列
線段樹 這 d 道 q 題 s 告訴我說 你沒學過線段樹 嗯 這題要好好想想 qaq 來吧首先要明確的事情是 delta now 記錄的是已經對當前點做過的,但是還沒有對當前點的兒子做過的操作 嗯 我們就這樣 慢慢的退一下 嗯 標記是給兒子用的 嗯 是給兒子用的 奉獻精神 然後,對於這個題,我們可以...
bzoj1798 ahoi2009 維護序列
time limit 30 sec memory limit 64 mb submit 3714 solved 1364 submit status discuss 老師交給小可可乙個維護數列的任務,現在小可可希望你來幫他完成。有長為n的數列,不妨設為a1,a2,an 有如下三種操作形式 1 把數列...
BZOJ 1500 維護序列
bzoj 1500 傳送門 可能平衡樹維護序列的所有操作都在這了吧 對序列的維護 fhq treap 和 splay 都能做 有幾個注意點 1 維護序列時始終記得第 k 大指的是序號,與權值無關 2 注意對0的初始化,畢竟如果無葉子結點時會用到 3 如果資料總量過大要資料 用佇列記錄被刪除的節點,同...