这道题明明是裸的线段树,蒟蒻却80分了五六次。。。

------------

根据题意,显然是维护一棵单点修改区间查询的线段树,于是直接套区间修改的代码。。。

结构体,即为树上的节点。

 struct node{
int l, r;
int val;
} tree[maxn * ];

建树,注意:将读入放到这里来!!原本是在main里面读入然后储存到stu数组中,结果就一直80分!!

 void Build(int l, int r, int pos) { //
tree[pos].l = l;
tree[pos].r = r;
if(l == r) {
int a;
a = read();
tree[pos].val = a;
}
else {
int mid = (l + r) >> ;
Build(l, mid, pos * );
Build(mid + , r, pos * + );
tree[pos].val = max(tree[pos * ].val, tree[pos * + ].val);
}
}

区间修改函数:
1. 如果直接是要求的区间,直接修改即可。
2. 反之则分配到左右子树上面去。
3. 回溯。

 void Update(int l, int r, int d, int pos) {
if(tree[pos].l == l && tree[pos].r == r) {
tree[pos].val = max(d, tree[pos].val);
return ;
}
int mid = (tree[pos].l + tree[pos].r) >> ;
if(r <= mid) Update(l, r, d, pos * );
else if(l > mid) Update(l, r, d, pos * + );
else {
Update(l, mid, d, pos * );
Update(mid + , r, d, pos * + );
}
tree[pos].val = max(tree[pos * ].val, tree[pos * + ].val);
}

区间查询函数:

其实流程和修改挺像的。

 int Query(int l, int r, int pos) {
if(tree[pos].l == l && tree[pos].r == r) {
return tree[pos].val;
}
int mid = (tree[pos].l + tree[pos].r) >> ;
if(r <= mid) return Query(l, r, pos * );
else if(l > mid) return Query(l, r, pos * + );
else {
return max(Query(l, mid, pos * ), Query(mid + , r, pos * + ));
}
}

主要处理部分:

read()是快速读入函数,然后要注意因为本题是单点修改,所以Update函数的l,r两个参数其实是一样的。

 scanf("%s", &op);
l = read(); r = read();
if(op == 'Q') printf("%d\n", Query(l, r, ));
else Update(l, l, r, );

emmm....大概就这么多了。

代码64ms,氧化后36ms。

题解 P1531 【I Hate It】的更多相关文章

  1. 洛谷P1531 I Hate It题解

    题目背景 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 题目描述 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的 ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. SQL中的union

    在SQL中,如果我们查询一个班级的考试成绩数据,再统计考试成绩的总和,我们使用以下两条语句: select StudentName,Grade from Student select '总成绩',SU ...

  2. oracle数据的启动

    打开实例 , 数据库到nomount状态: startup nomount;  参数文件 内存,进程 指定控制文件数据库打开到mount状态: alter datatbase mount;  控制文件 ...

  3. Oracle12C查询自建用户(非系统自带)

      select username from dba_users where INHERITED='NO';

  4. 关于目标检测 Object detection

    NO1.目标检测 (分类+定位) 目标检测(Object Detection)是图像分类的延伸,除了分类任务,还要给定多个检测目标的坐标位置.      NO2.目标检测的发展 R-CNN是最早基于C ...

  5. Js中遇到的坑点汇总

    一.Android 手机下输入框获取焦点时, 输入法挡住输入框的 bug 解决思路: 1.去掉overflow属性 2. Android 手机下, input 或 textarea 元素聚焦时, 主动 ...

  6. sudo不用在输入密码

    在任意的路径之下执行:sudo visudo 的命令对文件进行修改: 其中的: sudo ALL=(ALL) %admin ALL=(ALL) 这两个语句为: sudo ALL=(ALL) NOPAS ...

  7. python3爬取全民K歌

    Python3爬取全民k歌 环境 python3.5 + requests 1.通过歌曲主页链接爬取 首先打开歌曲主页,打开开发者工具(F12). 选择Network,点击播放,会发现有一个请求返回的 ...

  8. HTTP——学习笔记(8)

    HTTP中的一些协议内容会限制某些网站的功能使用 比如,Facebook这类的社交网站,需要实时地观察到海量用户公开发布的内容,而HTTP中的以下标准就会成为瓶颈: 一条连接上只可发送一个请求 请求只 ...

  9. 如何检查 Android 应用的内存使用情况

    Android是为移动设备而设计的,所以应该关注应用的内存使用情况.尽管Android的Dalvik虚拟机会定期执行垃圾回收操作,但这也不意味着就可以忽视应用在何时何处进行内存分配和释放.为了提供良好 ...

  10. [PYTHON]一个简单的单元測试框架

    近期尝试了一下TDD(測试驱动)的模式.感觉效果不错.在此总结一下,同学们假设有更好的办法,一定要告诉我:) 1. 每一个功能模块(文件),配一个单元測试模块. 以手头这个项目为样例:有LogCat. ...