I Hate It

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 58772    Accepted Submission(s): 22897

Problem 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
5 6
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
5
6
5
9

题目大意:就是考察最基本的线段树,基本的建树,查询,更新节点,不过有几点需要注意,
1.tree数组要开的够大,否则会TLE,我是开到4*N才A;
2.指令输入时如果用字符输入记得要用getchar吃换行符,否则会TLE(沧桑);
还有就是输入输出一定要用scanf printf .
如果这以上几点都注意了。。应该就可以A掉了。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
using namespace std;
const int maxn=800000;
int tree[maxn];
int n,m;
int MAX(int a,int b)
{
    return a>b?a:b;
}
void build(int p,int l,int r)
{
    if(l==r) {scanf("%d",&tree[p]);return;}
    int mid=(l+r)>>1;
    build(p<<1,l,mid);
    build(2*p+1,mid+1,r);
    tree[p]=MAX(tree[p<<1],tree[2*p+1]);
}
void change (int p,int l,int r,int x,int grade)
{
    if(l==r) {tree[p]=grade;return;}
    int mid=(l+r)>>1;
    if(x<=mid) change(p<<1,l,mid,x,grade);
    else change(2*p+1,mid+1,r,x,grade);
    tree[p]=MAX(tree[p<<1],tree[2*p+1]);
}
int find(int p,int l,int r,int x,int y)
{
    if(x<=l&&r<=y) return tree[p];
    int mid=(l+r)>>1;
    if(y<=mid) return find(p<<1,l,mid,x,y);
    if(x>mid) return find(2*p+1,mid+1,r,x,y);
    return MAX(find(p<<1,l,mid,x,y),find(2*p+1,mid+1,r,x,y));
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
             build(1,1,n);
        while(m--)
        {
            char c;
            int a,b;
            getchar();
            scanf("%c%d%d",&c,&a,&b);
            if(c=='U')
            {
            change(1,1,n,a,b);
            }
            if(c=='Q')
            {
                printf("%d\n",find(1,1,n,a,b));
            }
        }
    }
    return 0;
}
1000ms左右。。只是最基本线段树。。多多指教

hdu1754 基础线段树的更多相关文章

  1. I Hate It(hdu1754)(线段树区间最大值)

    I Hate It hdu1754 Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. hdu 1754(基础线段树) I Hate It

    http://acm.hdu.edu.cn/showproblem.php?pid=1754 数据比较大,暴力会超时,所以明显是线段树,普通的线段树,结构体中多开一个值sum储存每个子区间的最大成绩, ...

  3. HDU1754 && HDU1166 线段树模板题

    HDU1754 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 题目分析:对于给出的一个很长的区间,对其进行单点更新值和区间求最大值的操作,由于 ...

  4. HDU1166(线段树 +更新单点,求区间总和)、HDU1754(线段树 + 更新单点,求区间最大值)

    线段树简单应用 先附上几张图便与理解,大佬文章传送门1.传送门2 HDU1166:题目描述 线段树 +更新单点,求区间总和 代码如下(递归版) #include<iostream> #in ...

  5. HDU1754(线段树)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. bzoj 1012 基础线段树

    原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1012 今儿一天状态不好,都没怎么刷题..快下课了,刷道水题.... 裸的线段树 /*** ...

  7. E - I Hate It(基础线段树)

    E - I Hate It Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descr ...

  8. Poj 3246 Balanced Lineup(线段树基础)

    依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...

  9. HDU 1754 I Hate It(线段树基础应用)

    基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...

随机推荐

  1. 大家来找茬-SpringMVC中Tomcat正常启动,始终访问不了Controller,出404错

    创建了一个空的SpringMVC项目,Tomcat可以正常启动,但是运行的时候,始终进不了Controller,并且报404错误. 百度各种查,结果也是查不到原因.各个群里面各种求,各种贴源码,也没有 ...

  2. Cogs 12 运输问题2 (有上下界网络流)

    #include <cstdlib> #include <algorithm> #include <cstring> #include <iostream&g ...

  3. java 时区处理机制(0时区转换到服务器时区)

    package com.globalroam.util; import java.util.Calendar; import java.util.Date; import java.util.Time ...

  4. javascript第二课练习

    <script type="text/javascript">   window.onload=function()   //网页全部加载完后执行   {     va ...

  5. spark提交任务的流程

    1.spark提交流程 sparkContext其实是与一个集群建立一个链接,当你停掉它之后 就会和集群断开链接,则属于这个资源的Excutor就会释放掉了,Driver 向Master申请资源,Ma ...

  6. dwz分页实现分析

    dwz给我们提供了一个很好的列表UI 我对它的分析后将页面分为四个部分 <form id="pagerForm" method="post" action ...

  7. Qt自定义圆周动画(360 10.0 的模仿作者写的)

    由于项目需求,需要把一张图片做圆周运动,用到了属性动画,坐标计算等. 在编写代码的过程中,由于太长时间没用sin,cos函数忘了是用弧度为单位,汗呀 下面把代码贴出来 /* * 圆周运动动画 * */ ...

  8. 字符串转换为float<2>

    Configuration OK zjtest7-frontend:/usr/local/logstash-2.3.4/config# ../bin/logstash -f g01.conf Sett ...

  9. 深入浅出Node.js (3) - 异步I/O

    3.1 为什么要异步I/O 3.1.1 用户体验 3.1.2 资源分配 3.2 异步I/O实现现状 3.2.1 异步I/O与非阻塞I/O 3.2.2 理想的非阻塞异步I/O 3.2.3 现实的异步I/ ...

  10. bzoj1755 [Usaco2005 qua]Bank Interest

    Description Farmer John made a profit last year! He would like to invest it well but wonders how muc ...