CQOI2011 動態逆序對

2022-03-03 15:27:23 字數 747 閱讀 8754

其實和lrj藍書上面乙個題一模一樣呢qaq

回來再補樹套樹的寫法吧,這裡就先放上cdq分治——

我們可以先統計出總共的,然後再對每一步統計刪去的逆序對個數。

考慮刪去乙個數會影響哪些呢,首先肯定時間戳要比它小qwq(這樣才能保證應該在它前面的操作都進行了),然後因為cdq分治是只有一邊對另一邊的貢獻,所以要分類討論:

**如下:

">#include#include#include#include#define maxn 100010

#define int long long

using namespace std;

int n,m,cnt;

int tree[maxn<<2],pos[maxn],ans[maxn];

struct nodenode[maxn<<1];

inline bool cmp(struct node x,struct node y)

for(int j=l;j=mid+1;j--)

for(int j=mid;j>i;j--) clear(node[j].val);

}signed main()

; }

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

cdq(1,cnt);

for(int i=1;i<=m;i++) ans[i]+=ans[i-1];

for(int i=0;ireturn 0;

}

Cqoi2011 動態逆序對

主席樹套樹狀陣列。主席樹第一題。鏈結靜態的逆序對問題很簡單,用線段樹或者是樹狀陣列即可解決。現在的問題是如何解決一道動態的逆序對問題?我們先把所有的逆序對統計出來。每次刪除數,我們可以把這個數對於逆序對個數的貢獻刪除出去。這個貢獻如何統計呢?front i 記錄i位置之前有多少個數比這個數大 bac...

CQOI2011 動態逆序對

這是一道cdq分治的好題,這道題的前置知識是cdq分治解決三維偏序問題,如果不會這個話請先自行學習。首先第乙個答案很顯然就是逆序對的數量,然後後面每次的刪除操作,我們考慮把這個被刪除的點原先的貢獻從答案中拿掉。我們用y表示這個點的數,del表示第幾個被刪除,若沒有被刪除則del m 1 考慮每個點的...

CQOI2011 動態逆序對

點此看題 考慮c dq cdqcd q,有三個值 t,d,v t,d,v t,d,v 要求t i t iti d i d idi v i vj v i v j vi vj 很容易看出來是三維偏序的板題,我們先保證t tt的有序,cdq cdqcd q的時候排序d dd,然後用樹狀陣列查詢v vv,貼...