HDU 1754 I Hate It(线段树,单点更新,线段查询)

这道题是线段树入门题,其问题是单点更新,线段查询。

这里本来还打算用lazy标记做一下,但是不行,必须更新到单点

#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <cmath>
#include <vector>
#include <bitset>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define inf 0x3fffffff
#define mid ((l+r)>>1)
#define LSON(x) (x) << 1
#define RSON(x) (x) << 1 | 1
#define mem(x) memset(x,0,sizeof(x))
#define max(a,b) ((a)>(b)?(a):(b))
const int maxn=100+200000;
const double eps=1e-6;
typedef unsigned __int64 ull;
vector< vector<int> > edge;
/*struct P
{
	int v,next;
}p[maxn<<2];
int head[maxn];//st from 1
*/
int N,M,T;

typedef struct
{
	int l,r,mas;
}P;
P tt[maxn<<3];
/*
int push_up(int p,int l,int r)
{

}
int push_down(int p,int l,int r)
{

}
*/
void build(int p,int l,int r)
{
	tt[p].l=l;tt[p].r=r;tt[p].mas=0;
	if(l==r)
		return;
	build(p<<1,l,mid);
	build(p<<1 |1,mid+1,r);

}
int update(int p,int l,int r,int d)
{
	if(tt[p].l==l && tt[p].r==r)
	{tt[p].mas=d;return d;}
	int m=(tt[p].l+tt[p].r)>>1;
	int tmp,ans=tt[p].mas;
	if(r<=m) tmp=update(p<<1,l,r,d);
	else if(l>m) tmp=update(p<<1 |1,l,r,d);
	else
	{
		tmp=update(p<<1,l,m,d);
		ans=max(ans,tmp);
		tmp=update(p<<1 |1,m+1,r,d);
	}
	return tt[p].mas=max(ans,tmp);
}
int query(int p,int l,int r)
{
	if(tt[p].l==l && tt[p].r==r)
		return tt[p].mas;
	int m=(tt[p].l+tt[p].r)>>1;
	int tmp,ans=0;
	if(r<=m) tmp=query(p<<1,l,r);
	else if(l>m) tmp=query(p<<1 |1,l,r);
	else
	{
		tmp=query(p<<1,l,m);
		ans=max(ans,tmp);
		tmp=query(p<<1 |1,m+1,r);
	}
	return ans=max(ans,tmp);
}
int main()
{
    int cas=1;
	int i,j,k;
	int ans;
    char str[30];
	while(~scanf("%d%d",&N,&M))
	{
		build(1,1,N);
		for(i=1;i<=N;i++)
		{
			scanf("%d",&k);
			update(1,i,i,k);
		}
		for(i=0;i<M;i++)
		{
			scanf("%s%d%d",str,&j,&k);
			if(str[0]=='U') update(1,j,j,k);
			else {ans=query(1,j,k);printf("%d\n",ans);}
		}

	}
    return 0;
}
时间: 2025-01-13 07:29:25

HDU 1754 I Hate It(线段树,单点更新,线段查询)的相关文章

hdu 1540 Tunnel Warfare 线段树 单点更新,查询区间长度,区间合并

Tunnel Warfare Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1540 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Gene

HDU 1754 I Hate It:区间树 单点更新

之前做过 区间更新的 所以这个做起来要容易些 算是线段树的水题吧 都是基本操作 直接贴代码 #include<iostream> #include<cstdio> #define Size 200000 using namespace std; struct node { int L, R, Score; int Max; int Mid() { return (L+R)/2; } }Tree[Size*3]; void Build( int root, int L, int R

hdu--1166 敌兵布阵(线段树+单点更新和查询)

Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视. 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Dere

HDU 1754 I Hate It (线段树 单点更新)

题目链接 中文题意,与上题类似. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 #include <cstdlib> 6 #include <algorithm> 7 const int maxn = 200000+10; 8 using namespace std; 9 int a[maxn], n, m; 10

hdu 1754 I Hate It 线段树单点更新和区间求和

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 参照HH大牛写的额! Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. Input 本题目包含多

【HDU】1754 I hate it ——线段树 单点更新 区间最值

I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 37448    Accepted Submission(s): 14816 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要

线段树单点更新 hdu 1754 I Hate It

题意:给n个学生的成绩,可以动态修改某个学生的成绩,要求动态查询某个区间学生的成绩的最大值. 线段树单点更新题目,只需用一个数组存储当前节点对应的区间的成绩的最大值,并且把向上更新节点操作(pushup)改为更新该节点的两个子节点的最大值即可. 代码:

HDU 1754 I Hate It 线段树单点更新求最大值

题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #define N 200005 using namespace std; int data[N]; struct Tree { int l,r,ans; }tree[N*4]; void build(in

HDU 1166 敌兵布阵(线段树单点更新,板子题)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 87684    Accepted Submission(s): 36912 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务

HDU 4302 线段树单点更新,维护区间最大最小值

http://acm.hdu.edu.cn/showproblem.php?pid=4302 Problem Description Holedox is a small animal which can be considered as one point. It lives in a straight pipe whose length is L. Holedox can only move along the pipe. Cakes may appear anywhere in the p