線段樹加 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...