bzoj3744 Gty的妹子序列

2022-05-02 05:27:09 字數 2356 閱讀 4093

我早已習慣你不在身邊,

人間四月天 寂寞斷了弦。

回望身後藍天,跟再見說再見……

某天,蒟蒻autumn發現了從 gty的妹子樹(bzoj3720) 上掉落下來了許多妹子,他發現她們排成了乙個序列,每個妹子有乙個美麗度。

bakser神犇與他打算研究一下這個妹子序列,於是bakser神犇問道:"你知道區間[l,r]中妹子們美麗度的逆序對數嗎?"

請你幫助一下autumn吧。

第一行包括乙個整數n(1<=n<=50000),表示數列a中的元素數。

第二行包括n個整數a1...an(ai>0,保證ai在int內)。

接下來一行包括乙個整數m(1<=m<=50000),表示詢問的個數。

接下來m行,每行包括2個整數l、r(1<=l<=r<=n),表示詢問al...ar中的逆序對數(若ai>aj且il,r要分別異或上一次詢問的答案(lastans),最開始時lastans=0。

保證涉及的所有數在int內。

對每個詢問,單獨輸出一行,表示al...ar中的逆序對數。

41 4 2 3

12 4

2正解:分塊+樹狀陣列+主席樹。

想$o(n\sqrt)$的做法,想不出來。。然後看了一眼題解的複雜度。。

$o(n\sqrtlogn)$,這不是$mato$的檔案管理那題的複雜度嗎。。

然後就不是很難做了。

首先,我們將序列分塊以後可以預處理出$f[j][i]$,表示第$j$個點到第$i$個塊右端點這段區間的逆序對數。這個用樹狀陣列統計,複雜度是$o(n\sqrtlogn)$的。

然後,我們再把每個數弄到主席樹上(等下會用到的)。

詢問的時候,如果$l$和$r$在同乙個塊上,我們直接用樹狀陣列暴力統計這個區間的逆序對。

如果$l$和$r$不在同乙個塊上,我們就把區間分開,$l$和$r$的前乙個塊的右端點分成乙個區間,加上對應的$f$值。

然後我們再暴力統計$r$這個塊上屬於這個區間的點與前面區間的逆序對數。那麼我們要統計的就是$l-1$到$i-1$中大於$a[i]$的數的個數,這個就是用剛剛建好的主席樹搞就行了。

於是這道題我們就完美地解決了。

1

//it is made by wfj_2048~

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include

14#define inf (1<<30)

15#define n (50010)

16#define il inline

17#define rg register

18#define ll long long

19#define lb(x) (x & -x)

20#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)

2122

using

namespace

std;

2324

int sum[20*n],ls[20*n],rs[20*n],rt[n],sz;

25int f[n][230

],c[n],a[n],hsh[n],n,m,tot;

26int

ll[n],rr[n],bl[n],totb,block;

27ll ans;

2829 il int

gi()

3637 il void add(rg int x,rg int v)

3839 il int query(rg int x)

4041 il void insert(rg int x,rg int &y,rg int l,rg int r,rg int

v)46

47 il int querynxt(rg int x,rg int y,rg int l,rg int r,rg int

v)52

53 il void

work()

59 sort(hsh+1,hsh+tot+1),tot=unique(hsh+1,hsh+tot+1)-hsh-1;60

for (rg int i=1;i<=n;++i)

64for (rg int i=1;i<=totb;++i)

69 m=gi(); rg int

l,r;

70while (m--) else

81 printf("

%lld\n

",ans);82}

83return;84

}8586int

main()

bzoj3744 Gty的妹子序列

time limit 20 sec memory limit 128 mb submit 967 solved 293 submit status discuss 我早已習慣你不在身邊,人間四月天 寂寞斷了弦。回望身後藍天,跟再見說再見 某天,蒟蒻autumn發現了從 gty的妹子樹 bzoj372...

BZOJ 3744 Gty的妹子序列

第一行包括乙個整數n 1 n 50000 表示數列a中的元素數。第二行包括n個整數a1 an ai 0,保證ai在int內 接下來一行包括乙個整數m 1 m 50000 表示詢問的個數。接下來m行,每行包括2個整數l r 1 l r n 表示詢問al ar中的逆序 對數 若ai aj且i 對每個詢問...

BZOJ3744 GTY的妹子序列

第一行包括乙個整數n 1 n 50000 表示數列a中的元素數。第二行包括n個整數a1.an ai 0,保證ai在int內 接下來一行包括乙個整數m 1 m 50000 表示詢問的個數。接下來m行,每行包括2個整數l r 1 l r n 表示詢問al.ar中的逆序 對數 若ai aj且i對每個詢問,...