這是本蒟蒻的原創題
確實很簡單
本蒟蒻loj賬號diogenes
本題的難點在於每個操作會重複多次。核心思想是把第t秒的操作提前到第一秒,再減去多餘的部分。有一種構造方法: ad
d[i.
.j] add
[i..
j]
表示區間【i
,j】 【i,
j】
需要加的值。 de
l[i.
.j] del
[i..
j]
表示區間【i
,j】 【i,
j】
統計答案時需要減去的值。
假設時間
t t
給區間[l
,r]' role="presentation" style="position: relative;">[l,
r][l
,r]加上
x x
,應當給ad
d[l.
.r]' role="presentation" style="position: relative;">add
[l..
r]ad
d[l.
.r]每個加上
x x
,給del[l..r]每個加上x∗
(t−1
)' role="presentation" style="position: relative;">x∗(
t−1)
x∗(t
−1)假設時間t求區間[l
,r] [l,
r]
的和,就計算ad
d[l.
.r]∗
t−de
l[l.
.r] add
[l..
r]∗t
−del
[l..
r]
用線段樹維護區間加,區間和。
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
inline
int getint()
else
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar())
return t*p;
}inline
long
long getll()
else
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar())
return t*p;
}struct seqtree
void treeresize(int n)
seqtree():n(0)
seqtree(int n):n(n),a(n+2),addv(n<<2),sumv(n<<2){}
void maintain(int o,int l,int r)
if(r>l)
}void dfsbuild(int o,int l,int r)
if(lif(mid>=l) dfsbuild(lc,l,mid);
if(mid1,r);
maintain(o,l,r);}}
void build(vector
x,unsigned
int l,unsigned
int r)
seqtree(vector
a)
void updata(int o,int l,int r,int y1,int y2,ll v)
else
}void pushdown(int o,int l,int r)
}ll getsum(int o,int l,int r,int y1,int y2)
pushdown(o,l,r);
ll ret=0;
if(y1<=mid) ret+=getsum(lc,l,mid,y1,y2);
if(y2> mid) ret+=getsum(rc,mid+1,r,y1,y2);
return ret;
}};struct node
node(ll a,ll b,ll c):a(a),b(b),c(c){}
};int n,m;
seqtree del;
int main()
seqtree sum(k),del(k);
scanf("%d",&m);
for(int i=0;iint d,a,b;long
long c;
scanf("%d",&d);
if(d==1)
if(d==2)
}return
0;}
線段樹 題解
nyoj 1068 題目鏈結 題目意思 典型的線段樹,插線問線.不過多了乙個,a 操作某乙個區間乙個數整體加上乙個數 s 操作查詢某乙個區間的總和,q 操作,查詢這個區間有多少個奇數.下面是 線段樹延遲更新,奇數的個數更新時注意 如果變化的是奇數,那麼 現在區間奇數個數 區間長度 原本區間的奇數個數...
關於線段樹
首先肯定推薦學姐部落格!炒雞優秀的學姐!主要是貼 並沒有什麼理論的講解。例題 洛谷p3372 模板 線段樹1 洛谷p3373 模板 線段樹2 線段樹支援單點查詢 單點修改 區間查詢 區間修改等操作。基本思想是二分 將線段樹節點用乙個結構體打包起來 建樹 build 1,1 n void build ...
線段樹練習二 題解
線段樹練習二 桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 16 桌子長度 5 盒子數量 4 712 14 1 56 10 11 16 output 41 n nn 100000,1 m mm 10...