bzoj3295 動態逆序對

2022-05-09 12:36:13 字數 793 閱讀 1940

portal --> bzoj3295

雖然說這個可能原本是一道愉快的樹套樹但是

​  看到「按照某個順序依次刪除」這樣的字眼,比較容易聯想到乙個套路:反過來看,變成按照某個順序依次插入

​  那麼對於乙個詢問,刪掉它之前**化完了之後就是插入它之後)的所會影響到的逆序對數可以分為兩種:一種是在它前面但是比它大的,一種是在它後面但是比它小的

​  對於每乙個轉化後的插入我們都計算出這樣兩個值的和,然後答案顯然就是累加一下就好了

​  所以我們按照位置遞增做一次cdq,然後再按照位置遞減做一次cdq,就可以將上面兩種情況分別算出來了

總的來說就是:時間維用排序,位置維用cdq,數值維用樹狀陣列,然後就很愉快滴做完了

​  注意因為一開始的時候我們將順序反了過來所以最後要反著輸出

**大概長這個樣子:

#include#include#include#include#define ll long long

using namespace std;

const int n=100010;

struct op{

int pos,val,t;

friend bool operator < (op x,op y)

{return x.t>1;

solve(l,mid);

solve(mid+1,r);

int tmp,tp=l,tot=l-1;

for (int i=mid+1;i<=r;++i){

while (tp<=mid&&a[tp].pos

BZOJ3295 動態逆序對

問題描述 對於序列a,它的逆序對數定義為滿足i j,且ai aj的數對 i,j 的個數。給1到n的乙個排列,按照某種順序依次刪除m個元素,你的任務是在每次刪除乙個元素之前統計整個序列的逆序對數。輸入格式 輸入第一行包含兩個整數n和m,即初始元素的個數和刪除的元素個數。以下n行每行包含乙個1到n之間的...

bzoj3295 動態逆序對(CDQ分治)

time limit 10 sec memory limit 128 mb submit 7178 solved 2548 submit status discuss 對於序列a,它的逆序對數定義為滿足iaj的數對 i,j 的個數。給1到n的乙個排列,按照某種順序依次刪 除m個元素,你的任務是在每次...

BZOJ3295 動態逆序對(樹狀陣列套線段樹)

time limit 10 sec memory limit 128 mb submit 6058 solved 2117 submit status discuss 對於序列a,它的逆序對數定義為滿足i aj 的數對 i,j 的個數。給1到n的乙個排列,按照某種順序依次刪除m個元素,你的任務是在每...