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 思路 先求出初始序列的逆序數,可以歸併,這裡用的是線段數求。設當...