题解 P1531 【I Hate It】
这道题明明是裸的线段树,蒟蒻却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】的更多相关文章
- 洛谷P1531 I Hate It题解
题目背景 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 题目描述 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
随机推荐
- Linux 安装软件的几种方式
目录 几种安装方式 源代码编译安装 借助软件包管理器安装 二进制格式安装 总结 参考 几种安装方式 源代码编译安装 源代码包的安装一般为下载软件源代码,然后编译安装.常见的 C 程序软件的安装步骤是 ...
- 根据SPID查找SQL语句
SELECT /*+ ORDERED */ sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) ...
- 路飞学城Python-Day4(practise)
#1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex','eric','rain']# li = ['alex','eric','rain']# print('_'.j ...
- python3 之 Ellipsis
在翻django 代码的时候无意中看到的, 主要还是在注解时候使用 官方参考:https://docs.python.org/3/library/constants.html#Ellipsis 注意: ...
- Vue中两种跳转方式
第一种:通过标签跳转,<router-link></router-link> 第二种:通过js跳转,定义点击事件进行跳转
- red hat linux之Samba、DHCP、DNS、FTP、Web的安装与配置
本教程是在red hat linux 6.0环境下简单测试!教程没有图片演示,需要具有一定Linux基础知识,很多地方的配置需要根据自己的情况修改,照打不一定可以配置成功.(其他不足后续修改添加) y ...
- 查看centos7启动项
[root@k8s-master ~]# chkconfig Note: This output shows SysV services only and does not include nativ ...
- 【图灵杯 F】一道简单的递推题(矩阵快速幂,乘法模板)
Description 存在如下递推式: F(n+1)=A1*F(n)+A2*F(n-1)+-+An*F(1) F(n+2)=A1*F(n+1)+A2*F(n)+-+An*F(2) - 求第K项的值对 ...
- MD5 加密原理(转)
MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Secur ...
- C#串口调试工具 (WPF/MVVM结构完整示例版)
前文 由于经常用到串口调试, 尽管有现成的软件, 因为前端时间涉及一个二次开发, 就因为一个RtsEnable设置, 折腾半天, 网上各种版本的也很多, 功能扩展的很开也多.所以现在自己做了一个够用 ...