码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1754 I Hate It

时间:2015-05-03 09:25:00      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:线段树

线段树水题,复习一下线段树

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
#define N 200005
struct Node{
	int l,r,num,ma;
}node[N*4];
void build(int p,int l,int r){
	node[p].l=l;
	node[p].r=r;
	node[p].num=0;
	node[p].ma=0;
	if(l==r) return;
	int mid=(l+r)>>1;
	build(p*2,l,mid);
	build(p*2+1,mid+1,r);
}
void update(int p,int l,int r,int num){
	if(node[p].l>r||node[p].r<l) return;
	//printf("%d ",node[p].num);
	if(node[p].l==l&&node[p].r==r) {
		node[p].num=num;
		node[p].ma=num;
		//printf("%d ",node[p].num);
		return;
	}
	int mid=(node[p].l+node[p].r)>>1;
	if(r<=mid) update(p*2,l,r,num);
	else if(l>mid) update(p*2+1,l,r,num);
	else {
		update(p*2,l,r,num);
		update(p*2+1,l,r,num);
	}
	node[p].ma=max(node[p*2].ma,node[p*2+1].ma);
}
int query(int p,int l,int r){
	if(node[p].l>r||node[p].r<l) return -1;
	if(node[p].l>=l&&node[p].r<=r) {
		return node[p].ma;
	}
	return max(query(p*2,l,r),query(p*2+1,l,r));
}
int main(){
	#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF){
		int tmp,i;
		build(1,1,n);
		for(i=1;i<=n;i++) {
			scanf("%d",&tmp);
			update(1,i,i,tmp);
		}
		char c;
		for(i=0;i<m;i++){
			//printf("%d %d\n",i,m);
			int A,B;
			getchar();
			scanf("%c%d%d",&c,&A,&B);
			if(c=='Q') printf("%d\n",query(1,A,B));
			else update(1,A,A,B);
			//printf("klsdajf");
		}
	}
	return 0;
}


HDU 1754 I Hate It

标签:线段树

原文地址:http://blog.csdn.net/lj94093/article/details/45442723

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!