最高分是多少(线段树) 华为2016校园招聘
来源:互联网 发布:凡科怎么绑定域名 编辑:程序博客网 时间:2024/05/24 07:50
[编程题]最高分是多少
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输入包括多组测试数据。每组输入第一行是两个正整数N和M(0 < N <= 30000,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。
输出描述:
对于每一次询问操作,在一行里面输出最高成绩.
输入例子:
5 71 2 3 4 5Q 1 5U 3 6Q 3 4Q 4 5U 4 5U 2 9Q 1 5
输出例子:
5659
题目链接:http://www.nowcoder.com/questionTerminal/3897c2bcc87943ed98d8e0b9e18c4666
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;const int mmax=30000;//最底层30000个结点的满二叉树int data[mmax+5];int tarr[mmax*4+5];void build(int p,int l,int r)//p表示当前位置{ if(l==r) { tarr[p]=data[l]; return ; } int m=(l+r)>>1; int L=p<<1; int R=p<<1|1; build(L,l,m); build(R,m+1,r); tarr[p]=max(tarr[L],tarr[R]);}int Query(int a,int b,int p,int l,int r){ if(a<=l&&r<=b) return tarr[p]; int m=(l+r)>>1; int L=-1; int R=-1; if(a<=m) L=Query(a,b,p<<1,l,m); if(m<b) R=Query(a,b,p<<1|1,m+1,r); if(L==-1) return R; if(R==-1) return L; return max(R,L);}void Update(int idy,int value,int p,int l,int r){ if(l==r&&l==idy) { tarr[p]=value; return ; } int m=(l+r)>>1; if(idy<=m) Update(idy,value,p<<1,l,m); if(m<idy) Update(idy,value,p<<1|1,m+1,r); tarr[p]=max(tarr[p<<1],tarr[p<<1|1]);//返回的时候看左边大还是右边大}int main(){ int N,M; while(~scanf("%d%d",&N,&M)) { for(int i=1;i<=N;i++) scanf("%d",&data[i]); build(1,1,N); char ch; int a,b; while(M--) { scanf(" %c%d%d",&ch,&a,&b); if(ch=='U') Update(a,b,1,1,N); else if(ch=='Q') { if(a>b) swap(a,b); printf("%d\n",Query(a,b,1,1,N)); } } } return 0;}
0 0
- 最高分是多少(线段树) 华为2016校园招聘
- 华为2016校园招聘上机笔试题----最高分是多少
- 华为2016校园招聘上机笔试题:最高分是多少 [python]
- 华为2016校园招聘上机笔试题1最高分是多少
- 华为2016年校园招聘上机笔试题(1)----最高分是多少
- 华为机试----最高分是多少(线段树)
- 最高分是多少(华为2016校招)
- 华为笔试:最高分是多少(2016)
- 牛客网---2016---华为最高分是多少
- 最高分是多少(2016)
- 华为2016机试题目: 最高分是多少
- 2016华为机试题1:最高分是多少
- 华为机试题(一) 最高分是多少
- 华为16机试(一):最高分是多少
- 华为OJ 最高分是多少
- 华为-最高分是多少-Java
- [华为机试] 最高分是多少
- 最高分是多少(华为机试)
- 基于TCP网络通信的简易多线程GUI聊天室
- ubuntu Linux离线安装软件包
- 斐波那契的递归函数
- JSP要点总结
- IOS开发UI进阶之UITableView三
- 最高分是多少(线段树) 华为2016校园招聘
- java并发之ConcurrentHashMap
- 找出有环链表中环的起点
- Java实现循环单链表……
- MacOSX Cocos2d-x 配置Android Studio以及Xcode开发环境
- Thinkphp 动态查询 getBy 与 getFieldBy
- 模拟水的方法
- Swift中类的属性
- 常见前端面试题及答案