bzoj3289 Mato的檔案管理

2022-09-18 10:36:36 字數 1138 閱讀 9105

莫隊演算法+樹狀陣列+離散化。

一定要注意莫隊轉移時增加或減少的逆序對數,比較容易寫掛。

離散化那部分雖然效率很低,但是很好寫,正確性也很容易保證,雖然會拖慢程式執行速度,但編碼的複雜度卻大大降低了。

我覺得是一種不錯的選擇。//反正是抄的黃學長的。。

#include#include

#include

#include

using

namespace

std;

const

int maxn = 50000 + 10

;int

pos[maxn],a[maxn],n,m,block,l,r,ans,res[maxn];

intdisc[maxn];

struct

data q[maxn];

bool

cmp(data a,data b)

struct

bit

void add(int x,int

val)

int query(int

x) }bit;

intmain()

sort(disc+1,disc+n+1

);

for(int i=1;i<=n;i++) a[i]=lower_bound(disc+1,disc+n+1,a[i])-disc;

scanf("%d

",&m);

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

block = (int) sqrt(n+0.5

);

for(int i=1;i<=n;i++) pos[i]=(i-1)/block+1

; sort(q+1,q+m+1

,cmp);

l=1,r=0,ans=0

;

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

while(lwhile(l>q[i].l)

while(r>q[i].r)

res[q[i].id]=ans;

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

%d\n

",res[i]);

return0;

}

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有乙個習慣,他...