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

2021-07-29 19:43:33 字數 658 閱讀 3326

題目大意:給出乙個序列,每次交換兩個位置的數,求交換完後整個序列的逆序對數。

對於乙個位置會產生的逆序對數是他前面比他大的數+他後面比他小的數。

我們可以用樹狀陣列套線段樹維護一下,外層表示位置在樹狀陣列中該點的控制區間,線段樹是權值線段樹。

然後每次交換完了計算一下就可以了。

#include

#include

#include

#include

#include

#define n 200003

using namespace std;

int a[n],b[n],n,m,sz,cnt,root[n];

struct datatr[n*60];

void pointchange(int &i,int l,int r,int

x,int val)

int lowbit(int

x)void change(int

x,int

y,int val)

int qjsum(int i,int l,int r,int ll,int rr)

int query(int

x,int l,int r)

int main()

}

BZOJ2141 排隊 分塊,樹狀陣列

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

BZOJ2141 排隊 樹狀陣列 分塊

給定乙個序列 a 先輸出原先的逆序對數。然後 m 次操作,每次交換兩個數,並輸出交換後的逆序對數。1 m 2 times 10 3,1 n 2 times 10 4,1 a i 10 9 離散化。分個塊。對於每乙個字首塊和字尾塊搞乙個樹狀陣列,維護一下每種值的個數的字首和。考慮刪除和增加操作,就是修...

bzoj 2141 排隊 樹套樹

交換位置l,r,對答案產生的影響是l,r內 比l大的數個數 比l小的數個數 比r小的數個數 比r大的數的個數 l和r交換後應該 1或 1 求這個東西用樹套樹就可以 做資料結構做傻了,還有很多其他優秀的做法 include include include define maxn 1700005 usi...