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...