• I Hate It


    题目背景

    很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。

    题目描述

    不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩

    输入格式

    第一行,有两个正整数 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'的时候,表示这是一条更新操作,如果当前A学生的成绩低于B,则把ID为A的学生的成绩更改为B,否则不改动。

    输出格式

    对于每一次询问操作,在一行里面输出最高成绩

    输入输出样例

    输入 #1
    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
    输出 #1
    5
    6
    5
    9
    #include <bits/stdc++.h>
    using namespace std;
    int block,n,m;
    int a[200010],belong[200010],maxn[500];
    void update(int x,int y)
    {
        if(a[x]<y)
        {
            a[x]=y;
        }
        else
        {
            return ;
        }
        if(y>maxn[belong[x]])
        {
            maxn[belong[x]]=y;
        }
        return ;
    }
    int query(int x,int y)
    {
        int ans=-0x3f3f3f3f;
        for(int i=x;i<=min(belong[x]*block,y);i++)
        {
            ans=max(ans,a[i]);
        }
        if(belong[x]!=belong[y])
        {
            for(int i=(belong[y]-1)*block+1;i<=y;i++)
            {
                ans=max(ans,a[i]);
            }
        }
        for(int i=belong[x]+1;i<belong[y];i++)
        {
            ans=max(ans,maxn[i]);
        }
        return ans;
    }
    int main()
    {
        memset(maxn,-0x3f3f3f3f,sizeof(maxn));
        cin>>n>>m;
        block=sqrt(n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            belong[i]=(i-1)/block+1;
            maxn[belong[i]]=max(maxn[belong[i]],a[i]);
        }
        char opt[3];
        for(int i=1;i<=m;i++)
        {
            int x,y;
            scanf("%s%d%d",opt,&x,&y);
            if(opt[0]=='U')
            {
                update(x,y);
            }
            else
            {
                printf("%d
    ",query(x,y));
            }
        }
    }
  • 相关阅读:
    章节三、2-方法_演示实例
    章节三、1-方法
    章节二、5-数组
    章节二、4-String以及StringBuffer和StringBuilder的对比
    章节二、3-字符串类方法
    章节二、2-String 引用数据类型-字符串类
    章节二、1-java概述-数据类型
    需求管理做不好,等着9-12-7吧
    谈谈软件项目的风险管理
    《Spring Boot Cook Book》阅读笔记
  • 原文地址:https://www.cnblogs.com/hrj1/p/11212124.html
Copyright © 2020-2023  润新知