//在意個隊中
//每個人知道它的身高和在排在他前面或者後面的
//人的身高的個數
//問能否恢復原來的佇列
//如果有多種情況,輸出字典序最小的
//先將人以身高從小到大排序
//然後從第乙個人開始插入佇列
//對於第i個人k即為在其前面或者後面需要留幾個位置在它前面或者後面
//選擇兩種插入方式中位置小的乙個
//可以用樹狀陣列記錄空位 , 用二分找位置
#include
#include
#include
#include
using
namespace
std ;
const
int maxn = 1e5+10 ;
int tree[maxn] ;
struct node
}a[maxn];
bool cmp(struct node a , struct node b)
int ans[maxn] ;
void update(int x , int dx)
}int getsum(int x)
return sum ;
}int find(int l , int r , int v)
return l ;
}int main()
for(int i = 1;i <= n;i++)
tree[i] = 0 ;
sort(a+1 , a+1+n) ;
bool flag = false;
for(int i = 1;i <= n;i++)
else
}sort(a+1 , a+1+n , cmp) ;
printf("case #%d: " , ++cas) ;
if(flag)
puts("impossible");
else
for(int i = 1;i <= n;i++)
printf("%d%c" , a[i].h , i == n ?'\n':' ') ;
}return
0 ;}
HDU 5493 Queue(二分 樹狀陣列)
傳送門 題意 給你n個人,知道每個人的身高和每個人的前面或者後面有多少個比他高的,讓你輸出字典序最小的可能的排序。思路 我們可以將人按身高公升序順序,然後模擬插空,因為這樣我們就能保證之後插入的人有位置可插,只要注意每次我們可以判斷需要插入的空位置 min k,n i k i為第i個人,k為第i個人...
HDU 5493 Queue 二分 樹狀陣列
題意 有n個人排隊,每個人都有乙個獨一無二的身高,告訴你每個人的身高和他前面或者後面的比他高的人的個數 到底是前是後是未知的 要求你還原原來的佇列,並且字典序最小。思路 因為要求字典序最小,我們可以先按照身高從小到大排序。乙個人前面有k個人比他高或者後面有k個人比他高,我們可以將這個問題轉化為求乙個...
HDU 5493 Queue(二分 樹狀陣列)
題意 有n個人排隊,每個人都有乙個獨一無二的身高,告訴你每個人的身高和他前面或者後面的比他高的人的個數 到底是前是後是未知的 要求你還原原來的佇列,並且字典序最小。思路 因為要求字典序最小,我們可以先按照身高從小到大排序,假設當前到了第i高的人,他前面或者後面有k個人,那麼他前面的所有人都比他矮,比...