題目大意:有編號為1~n的n頭牛,已知排在第i頭牛前面且比第i頭牛編號小的牛的數量為ai,求第i頭牛的編號
input: c組資料,每組陣列乙個n,接著n個數字表示排在第i位的牛的ai.
output: 按順序輸出每位牛的編號.
思路:從最後一頭牛開始,ans[i]=剩餘編號中的第ai小的編號,
**:
#include#include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int maxn=10000
;struct
node;
intn;
node tree[maxn
<<2
];int
a[maxn],ans[maxn];
bool
mark[maxn];
void build(int root,int l,int
r)
int mid=(l+r)>>1
; tree[root].l=l,tree[root].r=r,tree[root].sum=r-l+1
;
if(mid>=l)build(root<<1
,l,mid);
if(mid1|1,mid+1
,r);
}int query(int root,int
x)
if(tree[root<<1].sum1|1,x-tree[root<<1
].sum);
else ans=query(root<<1
,x);
tree[root].sum=tree[root<<1].sum+tree[root<<1|1
].sum;
return
ans;
}int
main()
for(int i=1;i<=n;i++)if(mark[i])
for(int i=0;i)
printf(
"%d\n
",ans[i]);
}return0;
}
線段樹(一) 點修改
動態範圍最小值問題。給出乙個有 n 個元素的陣列 a 1,a 2,a n 你的任務是設計乙個資料結構,支援以下兩種操作 如果還是使用 sparse table 演算法,每次 update 操作都需要重新計算 d 陣列,時間無法承受。為了解決這個問題,這裡介紹一種靈活的資料結構 線段樹 segment...
線段樹 點修改 hdoj 1754
problem description 很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。這讓很多學生很反感。不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫乙個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。input 本題目包含多組測試,請處...
線段樹的修改
對於一棵 最大線段樹,每個節點包含乙個額外的max屬性,用於儲存該節點所代表區間的最大值。設計乙個modify的方法,接受三個引數root index和value。該方法將 root 為跟的線段樹中 start,end index,index 的節點修改為了新的 value 並確保在修改後,線段樹的...