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
随机推荐
- C# 利用占位符替换word中的字符串和添加图片
利用占位符替换word中的字符串和添加图片 ///<summary> /// 替换word模板文件内容,包括表格中内容 /// 调用如下:WordStr ...
- Get Script Path in Shell
#!/usr/bin/bashdir_old=$(pwd)absolute_script_path=$(cd $(dirname $0) && pwd)relative_script_ ...
- SpringAOP实现(原理)
AOP原理: AOP分为:JDK动态代理和CGLIB代理 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. 注 ...
- P53 T2
为方便储户,某银行拟开发计算机储蓄系统.储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名.住址.存款类型.存款日期.利率等信息,并印出存款单给储户:如果是取款,系统计算利息并印 ...
- Fibonacci(斐波那契)递归实现。容易看懂
#include<iostream>using namespace std;int fibonacci(int n){if(n<=0) return 0; else if(n==1) ...
- 发布自己的pods到CocoaPods trunk 及问题记录
这两天准备把之前写的一些小玩意添加到pods库中去,参考了一些资料后进行操作,实际中也遇到了一些问题,记录下来,问题及解决方式在后面. 参考内容转载如下: 首先更新了用trunk之后,CocoaPod ...
- js动画之多物体运动
多个物体这不能使用一个定时器了,要给每个物体一个定时器 <!DOCTYPE html> <html lang="en"> <head> < ...
- hdu 1231, dp ,maximum consecutive sum of integers, find the boundaries, possibly all negative, C++ 分类: hdoj 2015-07-12 03:24 87人阅读 评论(0) 收藏
the algorithm of three version below is essentially the same, namely, Kadane's algorithm, which is o ...
- java打jar包,引用其他.jar文件
大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口. 具体的方法是修改jar包内目录META-INF下的MANIF ...
- 更新App版本的流程
上班一年了还没有自己打包上传过APP,周五下班时项目经理手把手教了我一遍,我大致把流程在这里回顾一下: 1.首先要将svn上的代码拷贝一份到分支上,用终端操作:svn cp https://192.1 ...