B - I Hate It
#include<cstdio>
#include<string.h>
using namespace std;
int ans;
int max1=;
int a[];
struct Node{
int left;
int right;
int max;
}node[];
void TreeMake(int l,int r,int i)
{
node[i].left=l;
node[i].right=r;
node[i].max=;
if(l==r)
{
node[i].max=a[l];//是a[l]!!!!!
return;
}
else
{
int mid=(l+r)/;
TreeMake(l,mid,*i);
TreeMake(mid+,r,*i+);
node[i].max=node[*i].max>node[*i+].max?node[*i].max:node[*i+].max;//注意更新最大值,回溯
}
}
void Updata_tree(int l,int i)
{
if(node[i].left==l&&node[i].right==l)
{
node[i].max=ans;
return;
} else{
int mid=(node[i].left+node[i].right)/;
if(l<=mid) Updata_tree(l,*i);
if(l>mid) Updata_tree(l,*i+);
node[i].max=node[*i].max>node[*i+].max?node[*i].max:node[*i+].max;//注意回溯!!
} } void Query_tree(int l,int r,int i)
{
//if(node[i].left==l&&node[i].right==r)
// return node[i].max;
//
if(node[i].left>=l&&node[i].right<=r)
{
if(max1<node[i].max)
max1=node[i].max;
return;
}
int mid=(node[i].left+node[i].right)/;
if(r<=mid) Query_tree(l,r,*i);
else if(l>mid) Query_tree(l,r,*i+);
else
{
Query_tree(l,r,*i);
Query_tree(l,r,*i+);
}
} int main()
{
int n,m;
char ch[];
while(scanf("%d %d",&n,&m)!=EOF)
{
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
TreeMake(,n,);
while(m--)
{
scanf("%s",ch);
int x,y;
scanf("%d %d",&x,&y);
max1=;
if(ch[]=='Q')
{
Query_tree(x,y,);//查询(x,y)区间
printf("%d\n",max1);
}
if(ch[]=='U')
{
ans=y;
Updata_tree(x,);
}
}
}
return ;
}
Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
Input
在每个测试的第一行,有两个正整数 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。
Output
Sample Input
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5
Sample Output
6
5
9
Hint
Huge input,the C function scanf() will work better than cin
随机推荐
- Android版本
Android自从3.0版本开始引入了Fragment的概念,它可以让界面在平板上更好地展示 Fragment建议继承android.app.Fragment的包,另外support.v4包主要是 ...
- JS对数字进行货币格式化并且保留两位小数点,小数用0补全
/** * 将数值四舍五入(保留2位小数)后格式化成金额形式 * * @param num 数值(Number或者String) * @return 金额格式的字符串,如'1,234,567.45' ...
- jquery性能
1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本.因为新版本会改进性能,还有很多新功能. 下面就来看看,不同版本的jQuery性能差异有多大.这里是三条最常见的j ...
- 【 2013 Multi-University Training Contest 4 】
HDU 4632 Palindrome subsequence dp[x][y]表示区间[x,y]构成回文串的方案数. 若str[x]==str[y],dp[x][y]=dp[x+1][y]+dp[x ...
- .NET程序的简单编译原理
1.不管是什么程序,最终的执行官是CPU,而CPU只认识1和0的机器码. 2.我们现在写的一般是高级语言写的程序.CPU是不认识我们用高级语言写的源代码的,那应该怎么办才能让CPU执行我们写好的程序尼 ...
- mysql TIMESTAMP 设置为可NULL字段
今天遇到问题是mysql新建表的时候TIMESTAMP 类型的字段 默认是NOT NULL 然后上网查了一下 发现 很多都说 就是不能为NULL的 这都什么心态 其实设置为空很简单 只要在字段后面加上 ...
- UnityContainer 实现DI
DI(依赖注入) 的方式有很多种: 接口注入,属性注入,构造注入等.DI主要是为了实现代码的松耦合,方便代码的维护和扩展.(其实都是扯淡). 来说说我为啥要使用DI吧.公司有个项目,需要我一个人完成( ...
- centos6环境下安装tmux
Install tmux on CentOS 6:1. sudo rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-releas ...
- 关于ZendFramework环境的配置
在运用PHP进行网站建设的时候,使用框架能够很好的提高编程效率,PHP语言的框架很多,现在普遍使用的是由Zend公司开发的ZendFramework框架,本篇文章是关于ZendFramework的运行 ...
- Oracle Merge into 详细介绍
Oracle Merge into 详细介绍 /*Merge into 详细介绍MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查 ...