$n \leq 50000$,$q \leq 50000$,$n$的數列$q$個詢問,每次問某個區間只交換相鄰倆數,要交換幾次才能公升序。數字範圍不知反正要離散化。
注意不要學了莫隊就把離線題套路忘了,詢問右端點排序也是常用快捷方法。
好那我們試試。不會。好上莫隊。
每次增加乙個數,答案加上比他大(在右邊加入)或比他小(在左邊加入)的數。上樹狀陣列。
1view code//#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 }
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有乙個習慣,他...