Lost Cows 線段樹點修改

2022-08-10 08:42:12 字數 1169 閱讀 2072

題目大意:有編號為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 並確保在修改後,線段樹的...