題目鏈結
學了學動態開點的樹鏈剖分,其實跟動態開點的線段樹差不多啦
查詢的時候別ssbb地動態開點,如果沒這個點果斷返回0就行
只要注意花的種類能到intmax就行qwq!!!!
#include#include#include
#include
#include
#include
#define mid ((l+r)>>1)
#define maxn 100010
#define check(x) if(x==0) x=++tot;
using
namespace
std;
inline
long
long
read()
while
(isdigit(ch))
return num*f;
}int
tot;
maproot;
int ls[maxn*100
];int rs[maxn*100
];int
q[maxn];
intsize[maxn];
inttop[maxn];
intson[maxn];
intfather[maxn];
intdfn[maxn];
intdeep[maxn];
intback[maxn],cnt;
intn,m;
struct
edgeedge[maxn*3
];int
head[maxn],num;
inline
void add(int
from,int
to);
head[
from]=num;
}void find(int x,int
fa)}
void unionn(int x,int
top)
return;}
inline
void pushup(int rt)
void update(int o,int num,int l,int r,int &rt)
if(o<=mid) update(o,num,l,mid,ls[rt]);
else update(o,num,mid+1
,r,rs[rt]);
pushup(rt);
}int query(int
from,int to,int l,int r,int &rt)
inline
void addcol(int pos,int
val)
int ask(int
from,int to,int
val)
if(deep[from]>deep[to]) swap(from
,to);
ans+=query(dfn[from],dfn[to],1
,n,root[val]);
return
ans;
}int
main()
find(
1,1);
unionn(
1,1);
for(int i=1;i<=n;++i) update(dfn[i],1,1
,n,root[q[i]]);
int last=0
;
for(int i=1;i<=m;++i)
else
}return0;
}
小奇的數列
題目 背景 小奇總是在數學課上思考奇怪的問題。問題描述 給定乙個長度為 n 的數列,以及 m 次詢問,每次給出三個數 l,r 和 p,詢問 a l a l 1 a r mod p 的最小值。其中 l l r r。即模意義下的區間子串和最小值。輸入格式 第一行包含兩個正整數 n 和 m,表示數列的長度...
BZOJ 4548 小奇的糖果
有 n 個彩色糖果在平面上。小奇想在平面上取一條水平的線段,並拾起它上方或下方的所有糖果。求出最多能夠拾 起多少糖果,使得獲得的糖果並不包含所有的顏色。包含多組測試資料,第一行輸入乙個正整數 t 表示測試資料組數。接下來 t 組測試資料,對於每組測試資料,第一行輸入兩個正整數 n k,分別表示點數和...
JZOJ5228 小奇的集合
題意 有乙個大小為n的可重集s,小奇每次操作可以加入乙個數a b a,b均屬於s 求k次操作後它可獲得的s的和的最大值。資料保證這個值為非負數 輸出乙個整數,表示和的最大值。答案對10000007取模。對於30 的資料,有 n 105,k 105,ai 105。對於100 的資料,有 n 105,k...