zoukankan      html  css  js  c++  java
  • 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));
            }
        }
    }
  • 相关阅读:
    Java实现继承过程概述
    Java封装概述
    Java中包的介绍
    Java中final关键字概述
    Java继承概述
    mysql服务自动关闭的解决
    Unity3d碰撞检测中碰撞器与触发器的区别
    解决在Game模式下兼容编辑器模式
    GameObject.Find("")只能查找到显示的对象
    层(layer)的设置
  • 原文地址:https://www.cnblogs.com/hrj1/p/11212124.html
Copyright © 2011-2022 走看看