I Hate It

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

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

Hint

Huge input,the C function scanf() will work better than cin

Author
linle
Source
2007省赛集训队练习赛(6)_linle专场
题目要求的为200000,不算很大,所以非线段树也有解,但是按非线段树交的,虽然代码比较简单,但是确实与超时擦肩,附非线段树代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;int a[210000],Max,left,right,x,y,m,n,i,j,k,ans;char c;
int main()
{while(scanf("%d%d",&n,&m)!=EOF){Max=-1;for(i=1;i<=n;i++){scanf("%d",&a[i]);if(Max<a[i]){Max=a[i];ans=i;}}for(j=0;j<m;j++){getchar();scanf("%c%d%d",&c,&x,&y);if(c=='Q'){if(x<=ans&&y>=ans&&a[ans]==Max)//这一点  很重要,如果所求区间重复,则不需要计算 k=Max;else{k=-1;for(i=x;i<=y;i++)if(k<a[i]){k=a[i];ans=i;}}printf("%d\n",k);}else{a[x]=y;if(a[x]>Max){Max=y;ans=x;}}}}return 0;
}

但是   用线段树就不一样了,线段树时间为1000ms左右,但是似乎空间复杂度高了一点,不过离超内存还是很远的,附线段树代码,不懂线段树的,可以先看我第一篇线段树博客,敌兵布阵。

#include<stdio.h>
#include<string.h>
struct node
{int left;int right;int big;
}t[2200000/2];
int score[2200000/2];
int max(int a,int b)
{return a>b?a:b;
}
int build(int left,int right,int num)
{t[num].left=left;t[num].right=right;int mid=(left+right)/2;if(left==right)return t[num].big=score[left];return t[num].big=max(build(left,mid,2*num),build(mid+1,right,2*num+1));
}
int query(int left,int right,int num)
{int mid=(t[num].left+t[num].right)/2;if(t[num].left==left&&t[num].right==right)return t[num].big;if(mid>=right)return query(left,right,num*2);if(mid<left)return query(left,right,num*2+1);return max(query(left,mid,num*2),query(mid+1,right,num*2+1));
}
int update(int x,int y,int num)
{int mid=(t[num].left+t[num].right)/2;t[num].big=max(t[num].big,y);if(t[num].left==t[num].right)return t[num].big=y;if(x>mid)return update(x,y,num*2+1);return update(x,y,num*2);
}
int main()
{int i,j,k,l,m,n;char c;while(scanf("%d%d",&m,&n)!=EOF){for(i=1;i<=m;i++)scanf("%d",&score[i]);build(1,m,1);while(n--){getchar();scanf("%c%d%d",&c,&j,&k);if(c=='Q')printf("%d\n",query(j,k,1));elseupdate(j,k,1);}}return 0;
}

杭电1754I Hate It 线段树与非线段树相关推荐

  1. 杭电ACM-LCY算法进阶培训班-专题训练(线段树)

    杭电ACM-LCY算法进阶培训班-专题训练(线段树) 传送门 目录 杭电ACM-LCY算法进阶培训班-专题训练(线段树) 张煊的金箍棒(2) Problem Description Input Out ...

  2. 杭电1754--I Hate It(线段树)

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

  3. 杭电 HDU ACM 1754 I Hate It (线段树)

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

  4. 【BZOJ3110】【codevs1616】K大数查询,权值线段树套普通线段树

    Time:2016.05.09 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 之前没怎么接触过权值线段树(非主席树),这次就当学习了一下吧.一开始还把题意理解错了,我的 ...

  5. HDU献给杭电五十周年校庆的礼物 (切蛋糕,线段划分区域)

    献给杭电五十周年校庆的礼物 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. 杭电多校第七场 1011 Kejin Player HDU(6656)

    杭电多校第七场 1011 Kejin Player 题意:给你N行,代表从i级有花费a[i]元的r[i]/s[i]的概率达到i+1级,剩下的概率中可能会到达x[i]级.然后询问从L级到R级的花费会是多 ...

  7. hdoj杭电问题分类

    杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...

  8. 杭电ACM(HDUOJ)试题分类

    杭电ACM试题分类 第一篇 1001 这个就不用说了吧                      1002 简单的大数                            1003 DP经典问题,最 ...

  9. 2021杭电多校补题——第一场

    2021杭电多校补题--第一场 文章目录 Mod, Or and Everything Rocket land(待补) Puzzle loop(待补) Another thief in a Shop( ...

最新文章

  1. 十、延时之基本知识介绍及实验
  2. 科大星云诗社动态20210319
  3. 6.29 Vue 第二天 学习笔记
  4. 深入java并发包源码(三)AQS独占方法源码分析
  5. P3337-[ZJOI2013]防守战线【单纯形】
  6. windows之Apache服务器搭建
  7. 10个基于 Ruby on Rails 构建的顶级站点
  8. 神经网络 II:神经元模型
  9. 下载新浪android SDK
  10. input 数字类型
  11. 蓝桥杯真题 18省4-测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。 各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐
  12. 怎样取消隐式推送_iPhone XS ios12系统隐式推送开启后怎么关闭
  13. 训练SSD时,viz报错
  14. 关于chrome、360浏览器自动填充的黄色背景处理方案
  15. 是用bbed工具模拟对块的破坏,并使用rman bock recover进行块恢复
  16. Ubuntu 搜狗输入法打不出中文的解决办法
  17. 石家庄医学高等专科学校计算机试题,石家庄医学高等专科学校高职单招医学类对口职业测试题...
  18. asp.net mvc 导入 ajax excel,或者图片上传 后台不能接收的问题
  19. WAYOS BCM版扩展WAN口研究
  20. 月薪25K的高级Java程序员的面试题是怎么样的?

热门文章

  1. 【转】Qt之文件操作 QFile
  2. Mysql查询语句练习题
  3. 计数排序(Counting sort)
  4. 用Python实现数据结构之队列
  5. 【Spring】HttpMessageConverter的作用及替换
  6. 【293天】我爱刷题系列052(2017.11.25)
  7. MySQL -- 获取当前数据行号
  8. ribbon重试机制
  9. linux下ppp拨号无线上网
  10. java内存管理(适合初学者)