• 【华为2015校招某地上机题1】最高分是多少


    老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 

    输入描述:
    输入包括多组测试数据。
    每组输入第一行是两个正整数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 7
    1 2 3 4 5
    Q 1 5
    U 3 6
    Q 3 4
    Q 4 5
    U 4 5
    U 2 9
    Q 1 5
    
    输出例子:
    5
    6
    5
    9

    思路:这个和15年的编程之美海选的某道题差不多,不过编程之美有时间要求,这个没有,直接做就行了。
    注意:WA了一次后,看到牛客给的错误用例,原来a不一定大于b的。。。所以在Query里需要判断一下。
    Code:
    #include<stdio.h>
    
    void Update(int a, int b);
    void Query(int a, int b);
    
    int score[30000+5];
    
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)==2)
        {
            for(int i=1;i<=n;++i)
                scanf("%d",&score[i]);
            
            for(int i=0;i<m;++i)
            {
                char c;
                int a,b;
                getchar();
                scanf("%c%d%d",&c,&a,&b);
                if(c=='Q')
                {
                    Query(a,b);
                }
                else if(c=='U')
                {
                    Update(a,b);
                }
                else
                {
                    
                }
            }
        }
    }
    
    void Update(int a, int b)
    {
        score[a]=b;
    }
    
    void Query(int a, int b)
    {
        if(a>b)
        {
            int t=a;
            a=b;
            b=t;
        }
        
        int maxS=score[a];
        for(int i=a+1;i<=b;++i)
            maxS=maxS>score[i]?maxS:score[i];
        printf("%d
    ",maxS);
    }


  • 相关阅读:
    申诉电信ADSL宽带限速
    回帖整理
    继续无题
    抛砖引玉,征集体会
    关于程序组织和组织技巧的学习
    周鸿祎行
    无题
    用此书为例讨论下软件思想的学习
    笔记
    方法论究竟为社区提供了什么
  • 原文地址:https://www.cnblogs.com/buxizhizhou/p/4796109.html
Copyright © 2020-2023  润新知