先說一種很顯然的做法,大體框架肯定是莫隊,然後每來一種顏色就處理下,如果是新出現的就在bit當中把這個位置+1,如果這種顏色消失了就在bit中對應位置-1。
這樣的時間複雜度是o(
nn−−
√log
2n)
我交了一次發現超時了。
那怎麼辦?
觀察下,我們查詢和修改的複雜度都是o(
logn
) ,但是顯然查詢的次數要遠遠小於修改次數,因此考慮犧牲查詢的時間使修改變快。
都想到這裡了,顯然接下來就要上分塊了。用權值分塊代替bit,每個塊內記錄出現了多少種顏色,用乙個桶輔助修改,使修改的複雜度降到o(
1),查詢則變成o(
n−−√
) 。
總的時間複雜度o(
nlog
2n+n
n−−√
+mn−
−√)
//莫隊+分塊
#include
#include
#include
#define maxn 100010
using namespace std;
int cnt[maxn], num[maxn*10], q[maxn*10][4], size, n, m, col[maxn],
ans[maxn*10], pos[maxn], block[maxn];
inline bool cmp(int a, int b)
inline int
read(int
x=0)
void init()
inline void add(int c)
inline void del(int c)
inline int quiry(int l, int r)
void work()
for(i=1;i<=m;i++)printf("%d\n",ans[i]);
}int main()
BZOJ3809 Gty的二逼妹子序列
空間這麼小 然後就莫隊了 不知道三維kd tree能不能過 本來想打bit,結果發現過不了的樣子,因為修改比較多,詢問比較少,所以可以考慮平衡複雜度,用分塊維護 單次修改o 1 詢問o n code include include include include include include in...
bzoj 3809 Gty的二逼妹子序列
autumn和bakser又在研究gty的妹子序列了!但他們遇到了乙個難題。對於一段妹子們,他們想讓你幫忙求出這之內美麗度 a,b 的妹子的美麗度的種類數。為了方便,我們規定妹子們的美麗度全都在 1,n 中。給定乙個長度為n 1 n 100000 的正整數序列s 1 si n 對於m 1 m 100...
BZOJ3809 Gty的二逼妹子序列
bzoj3809 gty的二逼妹子序列 又是一道許可權題。本蒟蒻沒錢氪金。附上洛谷題面 洛谷p4867 gty的二逼妹子序列 autumn和bakser又在研究gty的妹子序列了!但他們遇到了乙個難題。對於一段妹子們,他們想讓你幫忙求出這之內美麗度 in a,b a,b 的妹子的美麗度的種類數。為了...