您的位置:首页 > 其它

hdu 1754 i hate it

2015-10-23 12:33 141 查看
#include<iostream>

#include<cstdio>

#include<cstring>

#define MMAX 200003

using namespace std;

int Q[4*MMAX];

int N,F,ql,qr,p,v;

void update(int r,int L,int R){

int M=(L+R)/2;

if(L==R) Q[r]=v;

else {

if(p<=M) update(r*2,L,M);else update(r*2+1,M+1,R);

Q[r]=max(Q[r*2],Q[r*2+1]);

}

}///更新线段树

int query(int r,int L,int R){

int ans=-1;

int M=(L+R)/2;

if(ql<=L&&R<=qr) return Q[r];

if(qr<=M) return query(r*2,L,M);

else if(ql>M) return query(r*2+1,M+1,R);

else {

ans=max(query(r*2,L,M),query(r*2+1,M+1,R));

}

return ans;

}///进行区间查询

int main(){

while(~scanf("%d%d",&N,&F)){

for(int i=0;i<N;i++){

scanf("%d",&v);

p=i+1;

update(1,1,N);

}///相当于建树

for(int i=0;i<F;i++){

char op[5];

int a,b;

scanf("%s %d %d",op,&a,&b);

if(op[0]=='Q'){

ql=a,qr=b;

printf("%d\n",query(1,1,N));}

else {

p=a,v=b;///P是插入的位置,v是插入的数

update(1,1,N);

}

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: