LuoguP6688 可重集 線段樹 hash

2022-05-08 01:27:09 字數 1176 閱讀 2156

線段樹加 hash 判重模板題.  

hash 的話必須要用雙 base 雜湊,否則會 wa.   

然後這道題中最好不要用自然溢位,感覺比取模還要慢一些.    

由於讀入量巨大,必須要開讀入優化才能過.   

雜湊的方式就是對於每個數維護 $\sum base^$,由於值域不大,提前預處理出來 base 的 num 次方即可.     

code:  

#include #define n 1000007 

#define lson now<<1

#define rson now<<1|1

#define mod 998244353

#define ll long long

#define setio(s) freopen(s".in","r",stdin)

using namespace std;

const int a=2333;

const int b=233;

int na[n],nb[n];

int val[n];

void init()

void update(int l,int r,int now,int p,int v)

int mid=(l+r)>>1;

if(p<=mid)

else

s[now]=s[lson]+s[rson];

}data query(int l,int r,int now,int l,int r)

else if(l<=mid) return query(l,mid,lson,l,r);

else return query(mid+1,r,rson,l,r);

}char *p1,*p2,buf[100000];

#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?eof:*p1++)

int rd() while(c<48);

while(c>47)

return x;

}int main()

else

else }}

return 0;

}

洛谷P6688 可重集

給出乙個長度為 n 的非負整數序列 a 1,a 2,a 3,ldots,a n 給出 q 次操作,每次先給出乙個引數 op 本質相同的定義 令區間長度為 text 序列 p dots p 為 a dots a 公升序排序後的結果,序列 q dots q text 為 a dots a 公升序排序後的...

Luogu3357 最長k可重線段集問題

problem 與 luogu3357 最長k可重區間集問題類似,但此題需要考慮斜率不存在的線段 我們將每個線段的兩個端點中 x 座標較小的那乙個認為是線段的起點,另乙個為終點 考慮拆點,我們將座標上的每乙個點拆成兩個點 2 x,2 x 1 對於一條線段,如果 x 是它的起點,將它設為 2 x 1 ...

網路流24題 最長k可重線段集問題

時空限制1000ms 128mb 給定平面 x o y 上 n個開線段組成的集合 i,和乙個正整數 k。試設計乙個演算法,從開線段集合 i 中選取出開線段集合 s i 使得在 x 軸上的任何一點 p,s中與直線 x p 相交的開線段個數不超過 k,且 z 達到最大。這樣的集合 s 稱為開線段集合 i...