HDU 1754 I Hate It (段树单点更新)

HDU 1754 I Hate It (段树单点更新)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

Problem Description
很多学校更受欢迎的习惯。

老师们真的很喜欢问。从XX XX到其中,的是多少。
这让非常多学生非常反感。

无论你喜不喜欢,如今须要你做的是,就是依照老师的要求。写一个程序,模拟老师的询问。当然。老师有时候须要更新某位同学的成绩。

 

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
Hint
Huge input,the C function scanf() will work better than cin

 

感觉没什么好说的,这是我线段树的入门题,感觉效果非常好

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)
using namespace std;
#define N 200005

struct stud{
int le,ri;
int va;
}f[N*4];

int a[N];

void pushup(int pos)
{
    f[pos].va=max(f[L(pos)].va,f[R(pos)].va);
}

void build(int pos,int le,int ri)
{
    f[pos].le=le;
    f[pos].ri=ri;

    if(le==ri)
    {
      f[pos].va=a[le];
      return ;
    }
    int mid=MID(le,ri);

    build(L(pos),le,mid);
    build(R(pos),mid+1,ri);

   pushup(pos);
}

void update(int pos,int le,int ri)
{
    if(f[pos].le==le&&f[pos].ri==le)
    {
        f[pos].va=ri;
        return ;
    }

    int mid=MID(f[pos].le,f[pos].ri);

    if(mid>=le)
        update(L(pos),le,ri);
    else
        update(R(pos),le,ri);

    pushup(pos);
}

int query(int pos,int le,int ri)
{
   if(f[pos].le>=le&&f[pos].ri<=ri)
   {
       return f[pos].va;
   }

   int mid=MID(f[pos].le,f[pos].ri);

   if(mid>=ri)
    return query(L(pos),le,ri);
   else
    if(mid<le)
    return query(R(pos),le,ri);
   else
      return max(query(L(pos),le,mid),query(R(pos),mid+1,ri));
}

int main()
{
    int n,m,i;

    while(~scanf("%d%d",&n,&m))
    {
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);

         build(1,1,n);

        char c[10];
        int le,ri;

        while(m--)
        {
            scanf("%s%d%d",c,&le,&ri);

            if(c[0]=='Q')
                printf("%d\n",query(1,le,ri));
            else
                update(1,le,ri);
        }
    }
    return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117345.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ehcache缓存原理_实现lru缓存

    ehcache缓存原理_实现lru缓存运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久

    2022年8月8日
    2
  • phpstorm2021.5激活激活码(最新序列号破解)

    phpstorm2021.5激活激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    57
  • Python实现“EMD\EEMD\VMD+Hilbert时频图”与“CWT小波时频图”

    Python实现“EMD\EEMD\VMD+Hilbert时频图”与“CWT小波时频图”Python实现“EMD\EEMD\VMD+Hilbert时频图”与“CWT小波时频图”  信号处理中常需要分析时域统计量、频率成分,但不平稳信号的时域波形往往复杂、无序,且傅里叶变换得到的频率成分是该时间段内的平均频率,无法分析频率随时间变化的情况。随后,短时傅里叶变换(STFT)、小波变换(WT)、希尔伯特变换(HHT)等时频分析方法相继而出。  其中,STFT受时间窗口的影响、WT则需要自己选择小波、HHT在变换时需要预先将信号分解为平稳信号。由于网上只有CWT小波时频图的python代码,笔者自

    2025年6月14日
    0
  • MVC学习笔记八:WebGrid控件的高级使用「建议收藏」

    MVC学习笔记八:WebGrid控件的高级使用「建议收藏」WebGrid控件的高级使用在笔记三中记录了WebGrid的简单使用,但实际工作中并不能满足开发要求,比如:考虑到性能,要求服务器端分页,而不是查出所有数据来进行简单的客户端页面分页;要在排序时,给列标题显示不同图像等等,都不是直接就能满足的,这里记录下对WebGrid进行的较高层次的使用。一.服务器端分页处理在演示服务端分页之前,先做一些简单的准备工作:

    2022年10月6日
    0
  • Google Buzz掀起新一轮隐私权争议「建议收藏」

    Google Buzz掀起新一轮隐私权争议「建议收藏」Google本周开始于全球的Gmail帐号中部署GoogleBuzz社交服务,不过,新上线的GoogleBuzz旋即引来外界对其隐私政策的质疑。GoogleBuzz可整合状态更新、连结、照片及影片等社交分享功能,移动版还加上了位置分享功能。引起隐私争议的其中一项功能为GoogleBuzz可自动找出使用者在Gmail中最常联系的好友并产生追随/被追随名单,而且使用者追随/被追随的对象列…

    2022年10月15日
    0
  • Android 屏幕适配之框架(AndroidAutoSize)(今日头条)适配

    Android 屏幕适配之框架(AndroidAutoSize)(今日头条)适配AndroidAutoSize框架 1.链接https://github.com/JessYanCoding/AndroidAutoSize 2.使用 2.1.添加Gradle配置implementation’me.jessyan:autosize:1.1.2′  2.2.添加AndroidManifest配置&lt;manifest&gt;…

    2022年6月4日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号