当前位置: 首页 > news >正文

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;
}


相关文章:

  • MapX bug 和设计缺陷
  • linux下svn命令大全
  • 《Play for Java》学习笔记(七)数据类型解析——Body parser
  • android alipay
  • 2014 BDTC 參会有感
  • [C#基础知识系列]专题十七:深入理解动态类型
  • 8天学通MongoDB——第四天 索引操作
  • 20个开源项目托管站点推荐
  • coursera 公开课 文本挖掘和分析(text mining and analytics) week 1 笔记
  • win7下使用Taste实现协同过滤算法
  • 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)
  • 分享一款快速APP功能测试工具
  • R语言编程艺术#04#数据框(data.frame)
  • 动态规划(DP),0-1背包问题
  • 各大公司广泛使用的在线学习算法FTRL详解
  • JavaScript DOM 10 - 滚动
  • Python学习之路16-使用API
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Yii源码解读-服务定位器(Service Locator)
  • 分享几个不错的工具
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 前端攻城师
  • 前端技术周刊 2019-01-14:客户端存储
  • 首页查询功能的一次实现过程
  • 小程序 setData 学问多
  • #Z0458. 树的中心2
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (LeetCode) T14. Longest Common Prefix
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)插入排序
  • (一一四)第九章编程练习
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 中的路径问题
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET运行机制
  • .Net组件程序设计之线程、并发管理(一)
  • @angular/cli项目构建--Dynamic.Form
  • @Autowired多个相同类型bean装配问题
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [@Controller]4 详解@ModelAttribute
  • [20150904]exp slow.txt
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [DevOps云实践] 彻底删除AWS云资源
  • [FZSZOJ 1223] 上海红茶馆