HDUJ 1754 I Hate It[通俗易懂]

HDUJ 1754 I Hate It

大家好,又见面了,我是全栈君。

I Hate It

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

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

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

int a[200005];
int p[200005];
int n,m;

int lowbit(int x)
{
    return x&(-x);
}

void build()
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        p[i]=a[i];
        for(j=1;j<lowbit(i);j<<=1)
        {
            if(p[i]<p[i-j])
                p[i]=p[i-j];
        }
    }
}

void insert(int i,int x)
{
    a[i]=x;
    while(i<=n)
    {
        if(p[i]<x)
            p[i]=x;
        else     break;

        i += lowbit(i);
    }
}

int query(int l,int r)
{
    int maxn=a[r];
    while(true)
    {
        if(maxn<a[r])
            maxn=a[r];
        if(l==r)   break;

        for(r-=1;r-l>=lowbit(r);r-=lowbit(r))
        {
            if(maxn<p[r])
                maxn=p[r];
        }
    }
    return maxn;
}

int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        memset(p,0,sizeof p);
        int i;
        for(i=1;i<=n;i++)
            scanf("%d",a+i);
        build();

        char c[3];
        int x,y;
        for(i=1;i<=m;i++)
        {
            scanf("%s%d%d",c,&x,&y);

            if(c[0]=='Q')
                printf("%d\n",query(x,y));
            else
                insert(x,y);
        }
    }

    return 0;
}

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

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

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


相关推荐

  • 转blog!!

    转blog!!

    2021年4月27日
    142
  • 华为海关单据识别服务–基于文字识别技术[通俗易懂]

    华为海关单据识别服务–基于文字识别技术[通俗易懂]业务背景目前,华为公司在海外设有4大供应中心,海关报关单全球一年有35w份左右(其中中国进口5w份,出口15w份,及香港进出口10w份,其它子公司5w份左右)。现在的单据处理方式还停留在通过人工方式将单据内容手动录入到系统中,人工录入的方式除了效率低以外,还存在员工疏忽或者疲劳导致的误操作。如何快速、准确的处理如此数量庞大的单据成为了供应链的一大诉求。问题描述海关报关单据是单据中较为常见的一…

    2022年9月21日
    2
  • java微服务架构有哪些_漂浮服务区后端

    java微服务架构有哪些_漂浮服务区后端在本文中我们将主要研究目前主要的BaaS平台的功能,以及Google,Facebook,Apple等互联网巨头在BaaS领域的动作。同时我们也会关注国内一些主流BaaS平台的发展以及国内互联网巨头如百度,华为等在BaaS领域的投入发展。1.国外主流的BaaS平台 在BaaS领域,有几件事情值得关注:2013年4月,Facebook收购Parse;2013年12月,Paypal收…

    2025年5月27日
    5
  • 硬盘安装Linux(ubuntu,centos)[通俗易懂]

    硬盘安装Linux(ubuntu,centos)[通俗易懂]硬盘安装Linux(ubuntu,centos) 硬盘安装Linux使用硬盘安装Linux最大的好处不只是方便,是快速。之前使用U盘安装,很慢,没有记录具体时间。Ubuntu区别不大,本身比较小,安装介质只有2G(ubuntu18.10);CentOS区别明显,最大的安装ISO文件9G(CentOS7.5);说明:系统对文件系统的支持:Ubunt…

    2022年4月19日
    43
  • 抓包工具Charles基本用法

    抓包工具Charles基本用法我们在进行B/S架构的Web项目开发时,在前端页面与后台交互的调试的时候,通常使用在JSP中加入“debugger;”断点,然后使用浏览器的F12开发者工具来查看可能出错的地方的数据。或者使用HttpWatch来抓包分析。在开发移动端项目没有网页的情况下,就不能通过这种方式抓取数据进行分析了。这时可以使用Charles满足以上要求。Charles是一款Http代理服务器和Http监视器,当移动

    2022年5月1日
    50
  • mysql判断表分区是否存在_mysql 分区表

    mysql判断表分区是否存在_mysql 分区表CREATETABLE`fs_orders_funds_detail_sp32`(`id`int(11)NOTNULLAUTO_INCREMENT,`confirm_time`datetimeNOTNULLDEFAULT’0000-00-0000:00:00′,`order_id`varchar(50)DEFAULTNULLCOMMENT’平台单号’,`updat…

    2022年5月25日
    185

发表回复

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

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