Remove Extra One 權值線段樹

2022-05-19 03:24:16 字數 1837 閱讀 9523

最近瘋狂練習線段樹。。。

這道題題意很簡單,在1-n中,找尋乙個數,使得去掉這個數後,對於每個位置中滿足 1<=j

我們考慮對於每個位置i的貢獻,如果當前位置已經滿足條件,那麼前面任何數的刪除,對這個位置實際上是沒有貢獻的,並且對於當前位置來說,刪除這個位置相當於減去乙個滿足條件的位置。

如果當前位置可以通過刪除乙個數,變成可能的話,那麼這個數字一定在前i位置裡,並且只有乙個大於這個數的位置,我們可以輕鬆是查詢前i位比某個值大的數目,以及查詢最大值所處於的位置(一直往右查詢即可)。那麼i位置,要想成為答案,就必須刪除前面的最大值,我們刪除前面最大值,相當於增加乙個滿足條件的位置。

如果前面有兩個以上大於這個數,這個數肯定不能成為答案。

所以我們維護乙個陣列,這個陣列vis[i]代表刪除i,可以生成新的滿足條件位置個數,取最大值中,值最小的。就是答案!!!

維護用權值線段樹就可以啦!!!

1 #include2 #include3 #include

4 #include5

#define ll long long

6#define lson rt<<1

7#define rson rt<<1|1

8 #include9

using

namespace

std;

10const

int maxx = 2e5+6;11

intvis[maxx];

12struct

nodetree[maxx<<2

];16

inta[maxx];

17void buildtree(int rt,int l,int

r)24

int mid=(l+r)>>1;25

buildtree(lson,l,mid);

26 buildtree(rson,mid+1

,r);27}

28void update(int rt,int

pos)

35int mid=(l+r)>>1;36

if(pos<=mid)

37update(lson,pos);

38else

39update(rson,pos);

40 tree[rt].cnt=tree[lson].cnt+tree[rson].cnt;41}

42int query_num(int rt,int

w)48

int mid=(l+r)>>1;49

if(w<=mid)else54}

55int getmax(int

rt)61

int mid=(l+r)>>1;62

if(tree[rson].cnt)else67}

68int

main()

74 memset(vis,0,sizeof

(vis));

75int mx=0

;76 buildtree(1,1

,n);

77for(int i=1;i<=n;i++)else

if(s==0

)85 update(1

,a[i]);86}

87int

ans;

88 mx=-2;89

for (int i=1;i<=n;i++)

94else

if(mx==vis[a[i]] && ans>a[i])98}

99 printf("

%d\n

",ans);

100}

101return0;

102 }

計權聲級(A計權,B計權與C計權)

由於人耳對不同頻率的聲音的感受能力不同,即相同聲壓級的聲音,人們會在聽覺上感到不同的響度。當需要客觀測量又要反映主觀響度感覺的方法來度量和評估實際的聲音強弱。國際標準為 iec61672 2014 由於a計權對描述人耳聽力相對於真實聲學的頻率響應最有意義,所以應用最為廣泛。但由於a計權僅適用於相對安...

嫡權法賦權法 賦權法

權重確定的主客觀賦權法 組員 餘芳雲 盧玲婕鍾靈歡 一 引言 在多屬性決策問題的求解過程中 屬性的權重具有舉足輕重的作用 它被用來反映屬性 的相對重要性。很多多屬性決策方法 如簡單加性加權法 topsis 法 多屬性效用理論 等都涉及到屬性權重 如何科學 合理地確定屬性權重 關係到多屬性決策結果的可...

嫡權法賦權法 賦權法

權重確定的主客觀賦權法 組員 餘芳雲1011200110 盧玲婕1011200147 鍾靈歡1011200148 一 引言 在多屬性決策問題的求解過程中,屬性的權重具有舉足輕重的作用,它被用來反映屬性的相對重要性。很多多屬性決策方法 如簡單加性加權法 topsis 法 多屬性效用理論等 都涉及到屬性...