BZOJ3289 Mato的檔案管理

2022-05-27 21:27:11 字數 971 閱讀 5525

$n \leq 50000$,$q \leq 50000$,$n$的數列$q$個詢問,每次問某個區間只交換相鄰倆數,要交換幾次才能公升序。數字範圍不知反正要離散化。

注意不要學了莫隊就把離線題套路忘了,詢問右端點排序也是常用快捷方法。

好那我們試試。不會。好上莫隊。

每次增加乙個數,答案加上比他大(在右邊加入)或比他小(在左邊加入)的數。上樹狀陣列。

1

//#include

2 #include3 #include4 #include5

//#include6//

#include7//

#include

8 #include9 #include10

using

namespace

std;

1112

intn,m,tot,lq;

13#define maxn 50011

14int

a[maxn],bel[maxn];

15struct quesq[maxn];

16bool cmp(const ques a,const ques b)

1718

intlisa[maxn],li,ans[maxn],ss;

19struct

bit20

23void add(int x,int v)

24int query(int x)

25}t;

26void modifyl(int x,int type)

27void modifyr(int x,int type)

2829

intmain()

3050

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

%d\n

",ans[i]);

51return0;

52 }

view code

bzoj3289 Mato的檔案管理

給定乙個序列,每次詢問乙個區間,你可以交換相鄰兩個元素,這個區間你最少需要多少次交換才能使其有序。我們觀察,每次交換如果交換a i 和a i 1 那麼顯然a i a i 1 交換後逆序對個數減一。當序列逆序對個數為0時序列就有序。那麼顯然題意就是詢問區間逆序對個數。我們可以用莫隊演算法來做。因為它符...

bzoj 3289 Mato的檔案管理

description mato同學從各路神犇以各種方式 你們懂的 收集了許多資料,這些資料一共有n份,每份有乙個大小和乙個編號。為了防止他人偷拷,這些資料都是加密過的,只能用mato自己寫的程式才能訪問。mato每天隨機選乙個區間 l,r 他今天就看編號在此區間內的這些資料。mato有乙個習慣,他...

bzoj3289 Mato的檔案管理

description mato同學從各路神犇以各種方式 你們懂的 收集了許多資料,這些資料一共有n份,每份有乙個大小和乙個編號。為了防止他人偷拷,這些資料都是加密過的,只能用mato自己寫的程式才能訪問。mato每天隨機選乙個區間 l,r 他今天就看編號在此區間內的這些資料。mato有乙個習慣,他...