HDU-1754-I Hate It
来源:互联网 发布:传奇账号数据库 编辑:程序博客网 时间:2024/05/23 20:17
I Hate It
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。
在每个测试的第一行,有两个正整数 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 61 2 3 4 5Q 1 5U 3 6Q 3 4Q 4 5U 2 9Q 1 5
Sample Output
5659
#include <cstdio>#include <iostream>using namespace std;int big;struct node{ int left;///左边界 int right;///右边界 int data;///保存数据 int maxx;///更新最大值} p[8000000];///只是建树 里面没东西void build (int ii,int l,int r)///编号 左右边界{ p[ii].left = l; p[ii].right = r; p[ii].maxx = 0; p[ii].data = 0; if ( l == r ) return ; else { int mid = (l + r)>>1;///>>1 表示 /2 但是位运算的效率高,节省时间 build (ii * 2 ,l,mid); build (ii * 2 + 1,mid + 1,r); }}///进行更新操作void updata (int ii,int a,int b)///编号 将编号为a的节点的data改为b{ if (p[ii].left == a && p[ii].right == a)///找到节点a { p[ii].maxx = b; p[ii].data = b; } else { int mid = (p[ii].left + p[ii].right )>>1; if (a <= mid )///在左子树 { updata (ii * 2 ,a,b); } else///右子树 { updata (ii * 2 + 1,a,b); } if ( b > p[ii].maxx ) p[ii].maxx = b; }}///查找...void findd (int ii,int a,int b)///节点编号 从a到b找最大值{ if (p[ii].left == a && p[ii].right == b)///找到范围 a到b { if (p[ii].maxx > big) big = p[ii].maxx; } else { int mid = (p[ii].left + p[ii].right )>>1; if ( b <= mid)///左子树 findd (ii * 2 ,a,b); else if (a > mid )///右子树 findd (ii*2 + 1,a,b); else///跨区间 找找左边 找找右边 { findd (ii * 2 , a, mid); findd (ii * 2 + 1,mid + 1 , b ); } }}int main (){ int n,m,i,x,y; while (~scanf ("%d%d",&n,&m)) { build (1,1,n); for (i = 1; i <= n; i++) { scanf ("%d",&x); updata (1,i,x);///从1节点开始 将编号为i的节点的data改为x } char c; for (i = 0 ; i < m; i++) { scanf ("%*c%c%d%d",&c,&x,&y); if ( c == 'Q') { big = 0; findd (1,x,y);///从1开始 x到y区间内的最大值 printf ("%d\n",big); } else { updata (1,x,y);///从1节点开始 将编号为i的节点的data改为x } } } return 0;}
0 0
- hdu 1754 I Hate It
- HDU 1754 I Hate It
- hdu 1754 I Hate It
- HDU 1754 I Hate It
- hdu 1754 I Hate It
- HDU 1754 I Hate It .
- HDU 1754 i hate it
- hdu 1754 I Hate It
- hdu 1754 I Hate It
- hdu 1754 I Hate It
- HDU 1754(I Hate It )
- hdu 1754 I Hate It
- hdu 1754 I Hate It
- HDU-1754-I Hate It
- hdu 1754 I Hate It
- hdu 1754 I Hate It
- hdu 1754 I hate it
- HDU 1754 I Hate It
- POJ 2288 Islands and Bridges(状态压缩)
- HDU 1398 Square Coins
- 设计模式-目录
- LeetCode_Minimun Path Sum
- codeforces #260 DIV 2 C题Boredom(DP)
- HDU-1754-I Hate It
- CF Round #260 (Div 2)
- ios 常见错误
- ios libxml/tree.h file not found解决办法
- HttpClient入门
- poj 1845(等比数列前n项和及快速幂)
- strace解决ssh登陆缓慢
- 个人整理使用的软件
- jsp页面session超时