线段树裸题。

需要注意的地方:

对于一次单点修改操作,需要先判断是否需要修改。注意题目中是“如果当前A学生的成绩低于B,则把ID为A的学生的成绩更改为B,否则不改动。”。所以判断条件应该是 if(w=='U')if(a[x]<y)。另外,由于在 \(\text{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;
}

【做题笔记】P1531 I Hate It的更多相关文章

  1. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  2. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

  3. SDOI2017 R1做题笔记

    SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30

  4. SDOI2014 R1做题笔记

    SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(

  5. SDOI2016 R1做题笔记

    SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...

  6. LCT做题笔记

    最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...

  7. java做题笔记

    java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...

  8. SAM 做题笔记(各种技巧,持续更新,SA)

    SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...

  9. PKUWC/SC 做题笔记

    去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\ ...

  10. POI做题笔记

    POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...

随机推荐

  1. CTF——代码审计之变量覆盖漏洞writeup【1】

    题目: 所需基础知识: 分析: 思路:由于目的是要拿$flag的值,所以可以得出最终会输出两个变量,而$flag的值在红框那行,被我们自己post的值给覆盖,所以flag值肯定不会在这出来,那么只剩下 ...

  2. Mybatis之连接池

    一,前言 ​ 连接池有很多种,最为熟悉的比如c3p0,DBCP,druid等. ​ mybatis支持三种内置的数据源类型: Pooled:实现dataSource接口,并且使用了池的思想. UNPo ...

  3. JS高级---案例:验证用户输入的是不是邮箱

    案例:验证用户输入的是不是邮箱 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  4. HTML文本域标签

    textarea文本域 cols指定列数 rows行数(不够用会自动扩容)

  5. BUUCTF [SUCTF 2019]EasySQL

    首先打开网址 发现有三种显示方法 还有一个没有输出 可以堆叠注入 1;show databases; 1;show tables; 可以看到有一个Flag表 测试发现from flag都被过滤不能直接 ...

  6. Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) C Messy

    //因为可以反转n次 所以可以得到任何可以构成的序列 #include<iostream> #include<string> #include<vector> us ...

  7. 自己动手系列----使用数组实现一个简单的Set

    Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复.主要有HashSet和TreeSet两大实现类. ...

  8. [POI2004] PRZ - 状压dp

    很简单的子集枚举状压dp 这个 (j-1)&i 的子集枚举是真的骚气 #include <bits/stdc++.h> using namespace std; int W,n,t ...

  9. js学习(精华帖)

    js获取当前域名.Url.相对路径和参数以及指定参数 js获取当前url组成部分 jquery操作select(增加,删除,清空)

  10. valign

    值 描述 top 对内容进行上对齐. middle 对内容进行居中对齐(默认值). bottom 对内容进行下对齐. baseline 与基线对齐.