線段樹的單點更新+區間查詢,典型的求區間最大值。
**如下:
1 #include2using
namespace
std;
3 typedef unsigned int
ui;4 typedef long
long
ll;5 typedef unsigned long
long
ull;
6#define pf printf
7#define mem(a,b) memset(a,b,sizeof(a))
8#define prime1 1e9+7
9#define prime2 1e9+9
10#define pi 3.14159265
11#define lson l,mid,rt<<1
12#define rson mid+1,r,rt<<1|1
13#define scand(x) scanf("%llf",&x)
14#define f(i,a,b) for(int i=a;i<=b;i++)
15#define scan(a) scanf("%d",&a)
16#define dbg(args) cout<<#args<<":"<17
#define pb(i) push_back(i)
18#define ppb(x) pop_back(x)
19#define inf 0x7fffffff
20#define maxn 200005
21int
n,m,mod;
22int t[maxn<<2
];23
char s[4
];24
int x,tot=0;25
void build(int l,int r,int rt)//
遞迴建樹,由於維護的是區間最大值,建樹初始是-inf
2633
void update(int l,int r,int rt,int pos,int c)//
單點更新
3440
int mid=(l+r)>>1;41
if(pos<=mid)update(lson,pos,c);
42else
update(rson,pos,c);
43 t[rt]=max(t[rt<<1],t[rt<<1|1]);//
pushup操作,由於沒有lazytag所以直接一條語句來維護 44}
45int query(int l,int r,int rt ,int l,int
r)46 53
intmain()
5471
else
if(s[0]=='q'
)7276}
77 }
洛谷1198最大數(線段樹)
現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果對乙個固定...
洛谷1198 最大值 線段樹
現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果對乙個固定...
洛谷1198 最大數 線段樹
現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。l 0 2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果對...