hdu 1754 线段树区间最值加更新
2016-06-20 20:30
337 查看
I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 61339 Accepted Submission(s): 23890
Problem Description
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
Input
本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 61339 Accepted Submission(s): 23890
Problem Description
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
Input
本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define MAXN 200000 class seg{ public: int l,r,mx; }q[MAXN*4]; void build(int l,int r,int n){ q .l=l; q .r=r; q .mx=0; if(l==r)return; int mid=(l+r)>>1; build(l,mid,n<<1); build(mid+1,r,n<<1|1); } int ans; void insert(int a,int d,int n){ if(q .l==q .r&&q .l==d){ q .mx=a; return; } int mid=(q .l+q .r)>>1; if(d<=mid){ insert(a,d,n<<1); } else { insert(a,d,n<<1|1); } q .mx=max(q[n<<1|1].mx,q[n<<1].mx); } void search(int l,int r,int n){ if(q .l==l&&q .r==r){ ans=max(ans,q .mx); return; } int mid=(q .l+q .r)>>1; if(r<=mid){ search(l,r,n<<1); } else if(l>mid){ search(l,r,2<<1|1); } else { search(l,mid,n<<1); search(mid+1,r,n<<1|1); } } int main(){ int N,M; int a,b; char s[2]; while(~scanf("%d",&N)){ scanf("%d",&M); build(1,N,1); for(int i=1;i<=N;i++){ int temp; scanf("%d",&temp); insert(temp,i,1); } for(int i=1;i<=M;i++){ ans=0; scanf("%s",s); scanf("%d%d",&a,&b); if(strcmp(s,"Q")==0){ search(a,b,1); printf("%d\n",ans); } else { insert(b,a,1); } } } return 0; }
相关文章推荐
- 从零开始写光栅化渲染器0:创建windows窗口
- libpcap1.7.4在Ubuntu_14.04_LTS上的使用
- tomcat部署项目如何去掉项目名称
- 二叉树的创建与遍历2
- 多线程中使用信号机制 pthread_sigmask()
- c语言第三次作业
- 如何修改win7下mysql密码
- USACO 3.4American Heritage 中序,前序构建二叉树
- Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable
- 第十六周上机实践项目4(2):程序设计
- 数黑格有多少个,模拟题,POJ(1656)
- June 11th 模拟赛B T2 翻山越岭 Solution
- Windows下使用VisualSVN Server搭建SVN服务器
- 111. Insertion Sort List
- [整理]阿里云之消息队列的使用
- c语言第一次作业
- 40个Java集合面试问题和答案
- c++编译过程
- multiselect多选框实现
- oracle常用函数汇总——临时表