E - I Hate It

Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

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

//线段树的应用,一般做法即可。

 #include <stdio.h>
#include <string.h> struct
{
int l;
int r;
int num;
}shu[]; int ax[]; int max(int x,int y)
{
return x>y?x:y;
} void Init (int left,int right,int k)
{
shu[k].l=left;
shu[k].r=right;
if(left==right)
{
//scanf("%d",&shu[k].num);
shu[k].num=ax[left];
return;
}
int mid=(left+right)>>;
Init(left,mid,*k);
Init(mid+,right,k*+);
shu[k].num=max(shu[*k].num,shu[*k+].num);
} void insert(int num,int n,int k)
{
if (shu[k].l==shu[k].r&&shu[k].l==n)//说明到叶节点了
{
shu[k].num=num;
return;
}
int mid=(shu[k].l+shu[k].r)/;
if (n<=mid) insert(num,n,*k);
else insert(num,n,*k+); shu[k].num=max(shu[*k].num,shu[*k+].num);
} int query(int left,int right,int k)
{
if (shu[k].l==left&&shu[k].r==right)//到叶节点或正好某个区间
return shu[k].num; int mid=(shu[k].l+shu[k].r)/;
if (right<=mid) return query(left,right,*k);
if (left>mid) return query(left,right,*k+);//去右节点
if(left<=mid&&right>mid)
return max(query(left,mid,*k),query(mid+,right,*k+));
return ;
} int main()
{
int Q;
int all_p,a,b;
char comend;
int i;
while (scanf("%d%d",&all_p,&Q)!=EOF)
{
for ( i=;i<=all_p;i++)
scanf("%d",&ax[i]); Init(,all_p,);//输入并且构造树
while (Q--)
{
getchar();//特别注意,没有会超时,坑了我3小时,cao
scanf("%c%d%d",&comend,&a,&b); if (comend=='Q') printf("%d\n",query(a,b,));
if (comend=='U') insert(b,a,);
}
}
return ;
}

E - I Hate It(基础线段树)的更多相关文章

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

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

  2. hdu1754 基础线段树

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

  3. bzoj 1012 基础线段树

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

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

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

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

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

  6. 线段树学习笔记(基础&进阶)(一) | P3372 【模板】线段树 1 题解

    什么是线段树 线段树是一棵二叉树,每个结点存储需维护的信息,一般用于处理区间最值.区间和等问题. 线段树的用处 对编号连续的一些点进行修改或者统计操作,修改和统计的复杂度都是 O(log n). 基础 ...

  7. SGU 311. Ice-cream Tycoon(线段树)

    311. Ice-cream Tycoon Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: standar ...

  8. 2018.07.23 hdu5828 Rikka with Sequence(线段树)

    传送门 这道题维护区间加,区间开根,区间求和. 线段树常规操作. 首先回忆两道简单得多的线段树. 第一个:区间覆盖,区间加,区间求和. 第二个:区间开根,区间求和. 这两个是名副其实的常规操作. 但这 ...

  9. 维护gcd的线段树 补发一波。。。

    基础线段树(辣鸡的不行) 发现自己线段树除了会维护加法和乘法就啥也不会了QWQ太菜了 瞎写了一个维护gcd的 首先,gcd(x,y)= gcd(x,y-x) 并且很容易推广到n个数,所以我们可以把原数 ...

随机推荐

  1. Struts2--百度百科

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构差别 ...

  2. javascript 清空数组的方法

    1,splice var ary = [1,2,3,4]; ary.splice(0,ary.length); console.log(ary); // 输出 [],空数组,即被清空了 2,lengt ...

  3. prototype 用法

    prototype使得js面向对象使用了prototype之后,使用它里面的属性或者函数 需要new出一个对象才可以使用.否则不使用prototype,直接向对象注入 function Person( ...

  4. css之定位学习

    如需转载烦请注明出处: 英文原文:http://www.vanseodesign.com/css/css-positioning/ 中文译文:http://www.w3cplus.com/blog/p ...

  5. View的setTag和getTag使用

    在listview 优化其中,会使用到setTag()以及getTag()方法 代码例如以下: @Override public View getView(int position, View con ...

  6. 一步步教你如何进行Xilinx SerDes调试

    FPGA SERDES的应用需要考虑到板级硬件,SERDES参数和使用,应用协议等方面.由于这种复杂性,SERDES的调试工作对很多工程师来说是一个挑战.本文将描述SERDES的一般调试方法,便于工程 ...

  7. FPGA研发之道(25)-管脚

    管脚是FPGA重要的资源之一,FPGA的管脚分别包括,电源管脚,普通I/O,配置管脚,时钟专用输入管脚GCLK等. 本文引用地址:http://www.eepw.com.cn/article/2664 ...

  8. the method getcontextpath() from the type httpservletrequest refers to the missing type string

    导入项目的时候容易报出这个错误,主要因为JRE(jdk版本不一致). 解决方法:就是重新配置路径,配置你机器上安装的jdk. 右击该出错项目→ Build Path → Configure Build ...

  9. 通过主机名(域名)获取IP地址,主机别名等信息

    一.所用API函数介绍 struct hostent FAR*gethostbyname( const char FAR* name ); 传入參数:const char FAR* name.主机名或 ...

  10. PHP使用CURL获取302跳转后的地址实例

    /*返回一个302地址*/     function  curl_post_302($url, $vars) { $ch = curl_init();          curl_setopt($ch ...