zoukankan      html  css  js  c++  java
  • 【做题笔记】P1531 I Hate It

    线段树裸题。

    需要注意的地方:

    对于一次单点修改操作,需要先判断是否需要修改。注意题目中是“如果当前A学生的成绩低于B,则把ID为A的学生的成绩更改为B,否则不改动。”。所以判断条件应该是 if(w=='U')if(a[x]<y)。另外,由于在 ( ext{change}) 时只是修改了这个元素在线段树中的值,所以在调用函数后,记得把这个数在原序列中的值也改动。

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    
    using namespace std;
    
    struct SegmentTree
    {
        int l,r;
        long long data;
        #define l(x) t[x].l
        #define r(x) t[x].r
        #define m(x) t[x].data
    };
    SegmentTree t[20000001*4];
    
    long long n,m,a[20000001];
    
    inline int read()
    {
        int w=1,s=0;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
        return s*w;
    }
    
    void build(int p,int l,int r)
    {
        l(p)=l,r(p)=r;
        if(l==r){m(p)=a[l];return ;}
        int mid=(l+r)/2;
        build(p*2,l,mid);
        build(p*2+1,mid+1,r);
        m(p)=max(m(p*2),m(p*2+1));
    }
    
    void change(int p,int x,int v)
    {
        if(l(p)==r(p)){m(p)=v;return ;}
        int mid=(l(p)+r(p))/2;
        if(x<=mid)change(p*2,x,v);
        else change(p*2+1,x,v);
        m(p)=max(m(p*2),m(p*2+1));
    }
    
    long long ask(int p,int l,int r)
    {
        if(l<=l(p)&&r>=r(p))return m(p);
        int mid=(l(p)+r(p))/2;
        long long ans=-(1<<30);
        if(l<=mid)ans=max(ans,ask(p*2,l,r));
        if(r>mid)ans=max(ans,ask(p*2+1,l,r));
        return ans;
    }
    
    int main()
    {
        n=read(),m=read();
        for(int i=1;i<=n;i++)a[i]=read();
        build(1,1,n);
        while(m--)
        {
            char w;int x,y;
            cin>>w;x=read(),y=read();
            if(w=='U')if(a[x]<y)change(1,x,y),a[x]=y;
            if(w=='Q')cout<<ask(1,x,y)<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    教程:如何手动安装Xamarin与Xamarin for VisualStudio
    安装matplotlib
    pycharm中文专业版安装使用
    在win7下安装PowerShell 5.0遇到的坑
    1997-2017
    系统界面截图
    组态与非组态结合的LT
    opencv mat转qimage
    QTableWidget 样式文件
    hiredis window 源码编译
  • 原文地址:https://www.cnblogs.com/BlueInRed/p/12309136.html
Copyright © 2011-2022 走看看