I Hate It

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

Submit Status

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 <stdio.h>
#include <string.h> struct N
{
int w;
}q[550000]; int max(int a, int b)
{
return a>b?a:b;
} void build(int x, int k, int left, int right, int rt )
{
if(x<left || x>right )
{
return ;
}
if(x==left && x==right )
{
q[rt].w = k;
return;
}
build(x, k, left, (left+right)/2, rt*2 );
build(x, k, (left+right)/2+1, right, rt*2+1 );
q[rt].w = max( q[rt*2].w, q[rt*2+1].w ) ;
} int query(int ll, int rr, int left, int right, int rt )
{
if(rr<left || ll>right )
{
return 0;
}
if(ll<=left && rr>=right )
{
return q[rt].w;
}
return max(query(ll, rr, left, (left+right)/2, rt*2),query(ll, rr,
(left+right)/2+1,right, rt*2+1 ));
} int main()
{
int n, m;
int i, j;
char ch;
int ss, dd;
int A; int B;
while(scanf("%d %d", &n, &m)!=EOF)
{
for(i=1; i<=n; i++)
{
scanf("%d%*c", &dd); //cha ru
build(i,dd, 1, n, 1);
}
for(j=0; j<m; j++)
{
scanf("%c %d %d%*c", &ch, &A, &B); if(ch=='Q')
{
ss = query(A, B, 1, n, 1) ;
printf("%d\n", ss );
}
else if(ch=='U')
{
build(A, B, 1, n, 1);
} }
}
return 0;
}

别人的写法:

#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std; const int MAXNODE = 524288; // 1<<19
const int MAXST = 200001;
struct STU{
int grade;
int left,right;
}st[MAXNODE]; int father[MAXST]; void BuildTree(int i,int left,int right){ // i是结点的序号 对应了数组下标
st[i].left = left;
st[i].right = right;
st[i].grade = 0; // 初始化为0
if (left == right)
{
father[left] = i; // 为了更新的时候从下往上 一直到顶
return;
}
BuildTree(i*2, left, (int)floor( (right+left) / 2.0));
BuildTree(i*2+1, (int)floor( (right+left) / 2.0) + 1, right);
} void UpdataTree(int ri)// 从下往上更新
{
if (ri == 1)
{
return;
}
int fi = ri / 2; // 父结点
int a = st[fi<<1].grade; // 该父结点的两个子结点
int b = st[(fi<<1)+1].grade; st[fi].grade = (a > b)?(a):(b);
UpdataTree(ri/2); } int Max;
void Query(int i,int l,int r){ // i为区间的序号,四段查询 即四种情况 if (st[i].left == l && st[i].right == r) // 找到了一个完全重合的区间
{
Max = (Max < st[i].grade)?st[i].grade:(Max);
return ;
}
i = i << 1; // left child of the tree
if (l <= st[i].right) // 左区间有覆盖
{
if (r <= st[i].right) // 全包含于左区间
{
Query(i, l, r);
}
else // 半包含于左区间
{
Query(i, l, st[i].right);
}
}
i += 1; // right child of the tree
if (r >= st[i].left) // 右区间有覆盖
{
if (l >= st[i].left) // 全包含于右区间
Query(i, l, r);
else // 半包含于左区间
Query(i, st[i].left, r);
}
} int main()
{
int n_s,n_q,igrade; while(scanf("%d %d",&n_s,&n_q) != EOF){
BuildTree(1, 1, n_s);
for (int i= 1 ; i <= n_s; i++)
{
scanf("%d", &igrade ); st[father[i]].grade = igrade; // 底层的无条件更新成绩 UpdataTree(father[i]);
}
while(n_q--)
{
char o[3];int a,b; scanf("%s %d %d",o,&a,&b); if ( o[0] == 'Q')
{
Max = 0;
Query(1, a, b);
printf("%d\n",Max);
}
else
{
st[father[a]].grade = b; // 底层的无条件更新成绩
UpdataTree(father[a]);
}
}
}
return 0;
}

HDU 之 I Hate It的更多相关文章

  1. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  3. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  4. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  5. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  6. HDU 1796How many integers can you find(容斥原理)

    How many integers can you find Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

  7. hdu 4481 Time travel(高斯求期望)(转)

    (转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...

  8. HDU 3791二叉搜索树解题(解题报告)

    1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...

  9. hdu 4329

    problem:http://acm.hdu.edu.cn/showproblem.php?pid=4329 题意:模拟  a.     p(r)=   R'/i   rel(r)=(1||0)  R ...

  10. HDU 2586

    http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:求最近祖先节点的权值和 思路:LCA Tarjan算法 #include <stdio.h&g ...

随机推荐

  1. sgu101-欧拉回路

    101. Domino time limit per test: 0.25 sec.  memory limit per test: 4096 KB Dominoes – game played wi ...

  2. 基于vue + axios + lrz.js 微信端图片压缩上传

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...

  3. hdu 3367 Pseudoforest(并查集)

    题意:有一种叫作Pseudoforest的结构,表示在无向图上,每一个块中选取至多包含一个环的边的集合,又称“伪森林”.问这个集合中的所有边权之和最大是多少? 分析:如果没有环,那么构造的就是最大生成 ...

  4. APICloud打包Vue单页应用

    APICloud新建项目后,会生成以下目录结构 其中index.html是入口文件,而vue-cli打包生成的文件是在dist目录下 ├─dist│ └─static│ ├─css│ └─js │ └ ...

  5. iOS 获取LaunchImage启动图

    iOS开发中,LaunchImage图片会根据手机机型的不同,自动匹配对应的图片,而我们如果想要拿到对应的图片,无法直接通过图片的名字获取该启动图,而需要通过以下方式 + (NSString *)ge ...

  6. [转载]Axis2 and CXF的比较

    在Celtix 和XFire 宣布合并的同年,另一个著名开源Web 服务框架Axis 的后继者Axis2 也诞生了.Axis2 并非Axis 的2.0 版,而是完全重写了Axis 的新项目.作为功能和 ...

  7. ubuntu安装源

    1.编辑sources.list文件 sudo vi /etc/apt/sources.list 添加以下安装源 #台湾源 deb http://tw.archive.ubuntu.com/ubunt ...

  8. Mysql:1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'错误解决

    select distinct b.sale_count from product_sale b where b.pro_id in (select a.pro_id from product a L ...

  9. Spring整合JMS(消息中间件)

    这一节来说说,异步机制及spring对JMS封装 一.消息异步处理 类似于RMI.Hessian.Burlap等远程方法调用,它们都是同步的,所谓同步调用就是客户端必须等待操作完成,如果远程服务没有返 ...

  10. 快速清除MS SQL SERVER 日志

    USE [master] GO ALTER DATABASE yourdatabase SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE yourd ...