BZOJ2141 排隊 樹狀陣列 分塊

2022-03-31 15:52:25 字數 862 閱讀 4922

給定乙個序列 $a$ ,先輸出原先的逆序對數。

然後 $m$ 次操作,每次交換兩個數,並輸出交換後的逆序對數。

$1≤m≤2\times 10^3,1≤n≤2\times 10^4,1≤a_i≤10^9$

離散化。

分個塊。

對於每乙個字首塊和字尾塊搞乙個樹狀陣列,維護一下每種值的個數的字首和。

考慮刪除和增加操作,就是修改塊內資訊和統計塊內塊外資訊。

統計塊內資訊直接暴力。

統計塊外資訊通過預處理的字首塊和字尾塊樹狀陣列來快速搞定。

可以寫乙個子程式把四個東西壓起來。

但是我這樣的做法需要注意一點:交換的兩個數字在同一塊內的時候,貢獻會被算兩遍。

#include using namespace std;

const int n=20005;

int n,m,a[n],ha[n],hs;

int lv[45][n],rv[45][n];

void hash()

void add(int *c,int x,int d)

int sum(int *c,int x)

int solve0(int *c,int *a,int n)

return ans;

}int update(int x,int d)

scanf("%d",&m);

printf("%d\n",ans);

while (m--)

swap(a[x],a[y]);

ans+=update(x,1);

ans+=update(y,1);

printf("%d\n",ans);

} return 0;

}

BZOJ2141 排隊 分塊,樹狀陣列

排排坐,吃果果,生果甜嗦嗦,大家笑呵呵。你乙個,我乙個,大的分給你,小的留給我,吃完果果唱支歌,大家 樂和和。紅星幼兒園的小朋友們排起了長長地隊伍,準備吃果果。不過因為小朋友們的身高有所區別,排成的隊伍 高低錯亂,極不美觀。設第i個小朋友的身高為hi,我們定義乙個序列的雜亂程度為 滿足ihj的 i,...

bzoj 2141 排隊 (樹狀陣列套線段樹)

題目大意 給出乙個序列,每次交換兩個位置的數,求交換完後整個序列的逆序對數。對於乙個位置會產生的逆序對數是他前面比他大的數 他後面比他小的數。我們可以用樹狀陣列套線段樹維護一下,外層表示位置在樹狀陣列中該點的控制區間,線段樹是權值線段樹。然後每次交換完了計算一下就可以了。include includ...

BZOJ 2141 排隊 分塊 Treap

排排坐,吃果果,生果甜嗦嗦,大家笑呵呵。你乙個,我乙個,大的分給你,小的留給我,吃完果果唱支歌,大家樂和和。紅星幼兒園的小朋友們排起了長長地隊伍,準備吃果果。不過因為小朋友們的身高有所區別,排成的隊伍高低錯亂,極不美觀。設第i個小朋友的身高為hi,我們定義乙個序列的雜亂程度為 滿足ihj的 i,j ...