現在請求你維護乙個數列,要求提供以下兩種操作:
1、 查詢操作。
語法:q l
功能:查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。
限制:l不超過當前數列的長度。
2、 插入操作。
語法:a n
功能:將n加上t,其中t是最近一次查詢操作的答案(如果還未執行過查詢操作,則t=0),並將所得結果對乙個固定的常數d取模,將所得答案插入到數列的末尾。
限制:n是整數(可能為負數)並且在長整範圍內。
注意:初始時數列是空的,沒有乙個數。
輸入格式:
第一行兩個整數,m和d,其中m表示操作的個數(m <= 200,000),d如上文中所述,滿足(0接下來的m行,每行乙個字串,描述乙個具體的操作。語法如上文所述。
輸出格式:
對於每乙個查詢操作,你應該按照順序依次輸出結果,每個結果佔一行。
輸入樣例#1:
5 100a 96
q 1a 97
q 1q 2
輸出樣例#1:
969396
[jsoi2008]
rmq問題,跑了一發線段樹。。。
#include#include#include#define lson rt<<1
#define rson rt<<1|1
#define max(a,b) a>b?a:b
#define maxn 200005
using namespace std;
int m,d;
long long t=0,a[maxn<<2];
inline long long read()
while(c>='0'&&c<='9')
return date*w;
}void pushup(int rt)
void update(int l,int r,int rt,int x,long long y)
mid=l+r>>1;
if(x<=mid)update(l,mid,lson,x,y);
else update(mid+1,r,rson,x,y);
pushup(rt);
}long long query(int l,int r,int rt,int x,int y)
int main()
if(c[0]=='q')
}return 0;
}
洛谷 P1198 JSOI2008 最大數
p1198 jsoi2008 最大數現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操...
洛谷 P1198 JSOI2008 最大數
序列兩種操作 q l 輸出末尾l個數中的最大值 q 操作用查詢區間最大值即可完成,a 操作需要能夠 add 元素。線段樹明顯可以,理解也比較簡單 這裡採用樹狀陣列維護區間最大值的 板子 來滿足這兩種操作。類封裝的最值 include cstdlib include include include i...
洛谷 P1198 JSOI2008 最大數
題目鏈結 如果還沒看題目的可以先去看一下題目 前置知識線段樹 這個題目就是兩個操作,乙個是新增資料,乙個是查詢區間最大值,但是由於資料範圍達到1e5,所以我直接想到的就是線段樹了,下面我們來看看線段樹要怎麼做。首先是建樹,由於題目中的資料有負數,負數,負數,所以大家建樹的時候一定要注意!初始化權值和...