樹上神奇 逆 逆序對(個人叫法)hh的小紙條 重中之重!!!!!

HH是一位十分愛好數學的大佬,尤爲喜好數數,一天百無聊賴的他寫下了一個1-N的排列,而且在小紙條上記下了每一個數前面有多少個數比他小,但HH不當心忘記了這個排列。如今只有當時記下的小紙條,如今請你還原出這個1-N的排列。 

HH:

c++

輸入

第一行:一個整數n
接下來n-1行:表示第二個數到第n個數前面有多少個數比它小。 
(由於第一個數前面沒有任何數,因此不須要輸入)

輸出

n行,每行一個整數,表示1個1-n的排列

樣例輸入 Copy

5
1
2
1
0

樣例輸出 Copy

2
4
5
3
1
通過長時間的思考(瞎碰),我發現了一件事:
題目翻譯成這樣:給定每一個點的逆序對的數量,求每一個點。
我和廖半仙一開始進行了愉快的跳錶操做。
事實證實它是徹底錯的。
總的來講,這題目被坑了的惟一緣由就是:


MAXN吶!MAXN吶!
+1=100
-1=60
maxn。。。
ANSWER:
我發現:最後一個值是能夠肯定的。
由於咱們知道最後一個值前面有幾個點比它小,因而這個點就是第n+1大的點。
把這個點塞到答案數組裏面。
找前一個大小,咱們發現:刪去第一個點,再進行以上操做,就能夠獲得這個點的大小。
因而:算法確認:
一、找當前數字對應的第a[n]+1大
二、塞答案
三、刪去這個數。
重點來了。
咱們刪去這個數,怎麼實現呢?
若是隻要數組硬爆就能解決的事,那仍是wzy大佬出的藍題嗎?
不可能!
我須要一個數據結構,來維護這個東西。
想一想看數據結構們,有什麼能夠刪點呢?刪點以後還要把後面的補上來....
我問到了鄰接表刪點,甚至想到了主席樹刪點(區間第k小,動態點刪掉而後查詢便可)
可是....都不行
平衡樹吧,有刪點操做。
可是我不會。
感謝shy大佬的shy樹。
MAXN吶!MAXN吶!
+1=100
-1=60
maxn。。。

上代碼:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int n,a[maxn],ans[maxn];
struct tree
{
    int ls,rs,size,pre;
}t[maxn*2];
int tot=0;
int build(int l,int r)
{
    if(l==r)
    {
        t[++tot].size=1;//子樹大小,葉節點的子樹大小=1
        t[tot].pre=l;//節點的值=l,12345.....
        return tot;//返回當前葉節點的編號
    }
    int mid=(l+r)>>1;
    int x=++tot;//樹節點的編號
    t[x].ls=build(l,mid);//同主席樹建樹模式,ls rs=下面的返回值
    t[x].rs=build(mid+1,r);
    t[x].size=r-l+1;//差分處理子樹大小
    return x;
}
int ask(int x,int l,int r,int k)
{
    if(l==r)
    {
        t[x].size--;//葉節點,刪除它
        return t[x].pre;//返回葉節點的值
    }
    t[x].size--;//走一條邊,刪一個點
    int mid=l+r>>1;
    int mik=mid+1;
    int q=k-t[t[x].ls].size;
    if(k<=t[t[x].ls].size)return ask(t[x].ls,l,mid,k);//二叉搜索樹部分,有點相似主席樹,經過差分不停在節點上滑來滑去,直到找到相應的葉節點
    else                  return ask(t[x].rs,mik,r,q);
}
int main()
{
    scanf("%d",&n);
    for(int i=2;i<=n;i++)
    {
        scanf("%d",&a[i]);//n-1個
    }
    a[1]=0;//第一個數前面沒有比它小的
    build(1,n);//建樹
    for(int i=n;i>0;i--)
    {
        ans[i]=ask(1,1,n,a[i]+1);
    }
    for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
    return 0;
}

思路就是二叉查找樹,建樹以後,根據a數組,大了往左找,小了往右找,而後找到這個值爲止,刪點。算法

膜拜shy樹數組

%%%shy大佬,tql數據結構

(完)ui

相關文章
相關標籤/搜索