HDU 5592ZYB 線段樹求第K大

2021-12-29 21:12:40 字數 1120 閱讀 8361

hdu 5592zyb 線段樹求第k大:題意:給出你每插入乙個數,逆序數的總數。問原序列?題解:解釋樣例:0 1 2當第乙個位置插入乙個數時,逆序數的為0。

。。二。。。。。。。。。,。。。。。1.

。。三。。。。。。。。。,。。。。。2.

從後往前推,當第三個數插入後,個數由1變成2個, 說明前面有乙個大於他的數,既他是序列中第二大的,就是2.

其他自己推。 建一棵線段樹,優先判斷右子樹,每次查詢後,更新即可。

**:#include

#include

#include

#include

#include

#include

#include

#include

#include

#define bababaa printf("!!!!!!!\n")

#define ll long long

using namespace std;

int n,t;

const int n=50010;

int a[n];

int sum[n<<2];

int output[n];

void pushup(int rt)

void build(int l,int r,int rt)

int mid=(r+l)>>1;

build(l,mid,rt<<1);

build(mid+1,r,rt<<1|1);

pushup(rt);

}int query(int l,int r,int k,int rt)

int res;

int mid=(r+l)>>1;

if(sum[rt<<1|1]>=k)

res=query(mid+1,r,k,rt<<1|1);

else

res=query(l,mid,k-sum[rt<<1|1],rt<<1);

pushup(rt);

return res;

}int main()

build(1,n,1);

a[0]=0;

for(int i=n; i>=1; i--)

for(int i=1; i

HDU 5592 區間第K大 線段樹

題目 z yb 有乙個排列pp 但他只記得pp 中每個字首區間的逆序對數,現在他要求你還原這個排列.輸入 1 3 0 1 2 輸出 3 1 2題解 num k num k 1 是排列中第k個數貢獻的逆序數對,故 k num k num k 1 是第k個數在前k個數中的排名 從小到大 逆向確認排列,確...

hdu 1394 求逆序數(線段樹求)

題意描述 給你乙個有0 n 1數字組成的序列,然後進行這樣的操作,每次將最前面乙個元素放到最後面去會得到乙個序列,那麼這樣就形成了n個序列,那麼每個序列都有乙個逆序數,找出其中最小的乙個輸出!解析 求出a1,a2,an 1,an的逆序數之後,就可以遞推求出其他序列的逆序數。假設要把a1移動到an之後...

hdu 1394 線段樹求逆序數

線段樹求逆序數 求小逆序數 神奇 題意 給定乙個序列,對該序列的n種排列 排列如下 的每種排列 0 n 1 的逆序數求最小值 a1,a2,an 1,an a2,a3,an,a1 a3,a4,an,a1,a2 an,a1,a2,an 1 思路 先求出初始序列的逆序數,可以歸併,這裡用的是線段數求。設當...