bzoj 1012 簡單的線段樹

2021-06-26 23:40:30 字數 1117 閱讀 1660

time limit: 3 sec  

memory limit: 162 mb

submit: 4273  

solved: 1918 [

submit][

status]

現在請求你維護乙個數列,要求提供以下兩種操作: 1、 查詢操作。語法:q l 功能:查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制:l不超過當前數列的長度。 2、 插入操作。語法:a n 功能:將n加上t,其中t是最近一次查詢操作的答案(如果還未執行過查詢操作,則t=0),並將所得結果對乙個固定的常數d取模,將所得答案插入到數列的末尾。限制:n是非負整數並且在長整範圍內。注意:初始時數列是空的,沒有乙個數。

第一行兩個整數,m和d,其中m表示操作的個數(m <= 200,000),d如上文中所述,滿足(0

對於每乙個查詢操作,你應該按照順序依次輸出結果,每個結果佔一行。

5 100

a 96

q 1a 97

q 1q 2

9693

96

#include#define n 200005

struct node

a[n*4];

int max(int a,int b)

void build(int x,int y,int t)

int mid=(x+y)>>1,temp=t<<1;

build(x,mid,temp);

build(mid+1,y,temp+1);

a[t].ma=max(a[temp].ma,a[temp+1].ma);

}void update(int t,int k,int val)

int mid=(a[t].x+a[t].y)>>1,temp=t<<1;

if(k<=mid)

update(temp,k,val);

else

update(temp+1,k,val);

a[t].ma=max(a[temp].ma,a[temp+1].ma);

}int query(int t,int x,int y)

int main()

else}}

return 0;

}

BZOJ 1012之線段樹解法

根據題意,很容易想到線段樹,單點修改,區間查詢,線段樹的模板大家都有,所以就不再做過多解釋。不過有一點值得一提,在我做這道題的時候使用了cin和cout,後來隊友告訴我,bzoj使用了o2優化,使用cin和cout可能會報錯,果然,我改了cin和cout之後就沒有問題了。include includ...

bzoj1012(線段樹模板題)

題目讀了三遍才讀懂,對於蒟蒻來說,看上去很難得樣子,實際就是線段樹的單點更新,然後求區間最值,無奈之前還想著怎麼建樹插進去。結果re n次,感覺自己水的一匹,唉 做題效率極低。真是被自己蠢哭了 include include include include include pragma warnin...

BZOJ 1012 線段樹 單調佇列

非常裸的線段樹 單調佇列 假設乙個節點在佇列中既沒有時間優勢 早點入隊 也沒有值優勢 值更大 那麼顯然不管在如何的情況下都不會被選為最大值。既然它僅僅在末尾選。那麼自然能夠滿足以上的條件。線段樹 include stdio.h include string.h struct node data 80...