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