I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 83459 Accepted Submission(s): 32084
Problem Description
很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。
這讓很多學生很反感。
不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫一個程序,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。
Input
本題目包含多組測試,請處理到文件結束。
在每個測試的第一行,有兩個正整數 N 和 M ( 0
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#define LL long long
using namespace std;
int a[200100];
int tree[4*200100];
int maxx(int a,int b)
{
return a>b?a:b;
}
void build(int p,int l,int r)
{
if(l == r)
{
tree[p] = a[l];
return ;
}
int mid = (l+r) >> 1;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
tree[p] = maxx(tree[p*2],tree[p*2+1]);
}
void update(int p,int l,int r,int x,int y)
{
if(l == r)
{
tree[p] = y;
return ;
}
int mid = (l + r) >> 1;
if(x <= mid)
{
update(p*2,l,mid,x,y);
}
else
{
update(p*2+1,mid+1,r,x,y);
}
tree[p] = maxx(tree[p*2],tree[p*2+1]);
}
int query(int p,int l,int r,int x,int y)
{
if(l >= x && r <= y)
return tree[p];
int mid = (l + r) >> 1;
if(y <= mid)
{
return query(p*2,l,mid,x,y);
}
if(x > mid)
{
return query(p*2+1,mid+1,r,x,y);
}
return maxx(query(p*2,l,mid,x,mid),query(p*2+1,mid+1,r,mid+1,y));
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
//memset(tree,0,sizeof(tree));
//memset(a,0,sizeof(a));
for(int i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
}
build(1,1,n);
for(int i = 1; i <= m; i++)
{
char t;
int x,y;
scanf(" %c",&t);
scanf("%d%d",&x,&y);
if(t == 'U')
{
update(1,1,n,x,y);
}
if(t == 'Q')
{
int ans = query(1,1,n,x,y);
printf("%d\n",ans);
}
}
}
}