BZOJ3809 Gty的二逼妹子序列

2022-05-19 20:52:52 字數 1432 閱讀 5708

給出乙個n個數的序列,序列中的數範圍為1到n,給出m個操作,每個操作輸入l,r,a,b,輸出l到r中權值為a到b的數的種類

一開始想法是用樹狀陣列維護權值總類,結果t了

旁邊的lxj大佬d了我,說:這道題卡了樹狀陣列,因為它修改帶log

認真地聽了一波講解,就直接把權值也給分塊了

因為權值和數的個數的區間是一樣的,所以可以一併分塊

然後修改o(1),而求值用n0.5,直接卡了過去

伏地膜lxj大佬

#include#include

#include

#include

#include

using

namespace

std;

struct

node

q[1100000

];int s[110000

];int bl[1100],br[1100],belong[110000

];bool

cmp1(node n1,node n2)

return

false;}

bool

cmp2(node n1,node n2)

int d[1100],sum[110000

];void add(int

x)void del(int

x)int solve(int x,int

y)

return

ans;

}for(int i=bx+1;i<=by-1;i++) ans+=d[i];

for(int i=x;i<=br[bx];i++) if(sum[i]>0) ans++;

for(int i=bl[by];i<=y;i++) if(sum[i]>0) ans++;

return

ans;

}int

main()

br[belong[n]]=n;

for(int i=1;i<=m;i++)

sort(q+1,q+m+1

,cmp1);

memset(sum,

0,sizeof

(sum));

memset(d,

0,sizeof

(d));

int l=1,r=0

;

for(int i=1;i<=m;i++)

while(l;}

while(r>q[i].r)

while(r;add(s[r]);}

q[i].d=solve(q[i].a,q[i].b);

}sort(q+1,q+m+1

,cmp2);

for(int i=1;i<=m;i++) printf("

%d\n

",q[i].d);

return0;

}

BZOJ3809 Gty的二逼妹子序列

空間這麼小 然後就莫隊了 不知道三維kd tree能不能過 本來想打bit,結果發現過不了的樣子,因為修改比較多,詢問比較少,所以可以考慮平衡複雜度,用分塊維護 單次修改o 1 詢問o n code include include include include include include in...

bzoj3809 Gty的二逼妹子序列

先說一種很顯然的做法,大體框架肯定是莫隊,然後每來一種顏色就處理下,如果是新出現的就在bit當中把這個位置 1,如果這種顏色消失了就在bit中對應位置 1。這樣的時間複雜度是o nn log 2n 我交了一次發現超時了。那怎麼辦?觀察下,我們查詢和修改的複雜度都是o logn 但是顯然查詢的次數要遠...

bzoj 3809 Gty的二逼妹子序列

autumn和bakser又在研究gty的妹子序列了!但他們遇到了乙個難題。對於一段妹子們,他們想讓你幫忙求出這之內美麗度 a,b 的妹子的美麗度的種類數。為了方便,我們規定妹子們的美麗度全都在 1,n 中。給定乙個長度為n 1 n 100000 的正整數序列s 1 si n 對於m 1 m 100...