HDU 1754 线段树+深搜 数据结构

选说一下题

本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。
学生ID编号分别从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。
当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。

对每一次更新   先深搜到底    tree【父节点】=max(子1,子2),递归更新在更可树;

本题由bagel       只要考虑更新只会出现更大的分数就能过       我先用这个AC了    之后用更全面的做了    能更新小数据!!



#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace  std;
#define LL(x) (x<<1)
#define RR(x) (x<<1)|1
int Max(int a,int b)
{
return a>b?a:b;
}


int tree[200000*4],n;
int update(int left,int right,int a,int b,int mark)
{
/*if(right<a) return tree[mark];
else if(a<left) return tree[mark]; 
int mid=(left+right)/2;
if(left==right)
{
tree[mark]=b;
return b;
}
else
{
tree[mark]=Max(update(left,mid,a,b,mark*2),update(mid+1,right,a,b,mark*2+1));
}
return 0;*/
int mid=(left+right)/2;
if(left==right)
{
tree[mark]=b;
return b;
}
if(a>mid)
tree[mark]=Max(tree[mark*2],update(mid+1,right,a,b,mark*2+1));
else
tree[mark]=Max(update(left,mid,a,b,mark*2),tree[mark*2+1]);
return tree[mark];
}
int find(int left,int right,int L,int R,int mark)
{
int mid,i,j;
if(left==L&&right==R) return tree[mark];
else
{
mid=(left+right)/2;
if(L>mid)
{
return(find(mid+1,right,L,R,mark*2+1));
}
else if(R<=mid)
{
return(find(left,mid,L,R,mark*2));
}
else
{
return Max(find(left,mid,L,mid,mark*2),find(mid+1,right,mid+1,R,mark*2+1));
}
}
}
int main()
{
int m,i,j,a,b;
char str[5];
while(~scanf("%d%d",&n,&m))
{
memset(tree,0,sizeof(tree));
for(i=1;i<=n;i++)
{
scanf("%d",&a);
update(1,n,i,a,1);
}
for(i=1;i<=m;i++)
{
scanf("%s",str);
scanf("%d%d",&a,&b);
if(str[0]=='U') update(1,n,a,b,1);
else
{
printf("%d\n",find(1,n,a,b,1));
}
}
}
return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值