BZOJ 1798, 維護序列

2021-07-26 18:01:23 字數 925 閱讀 3040

傳送門

維護乙個數列,要求支援區間加、區間乘以及查詢操作。

很裸的線段樹,難點在於加法和乘法的操作順序。

標記下傳時應先打乘法標記,再打加法標記,同時更新時還要用乘法標記維護加法標記。

#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 如果資料總量過大要資料 用佇列記錄被刪除的節點,同...