这道题明明是裸的线段树,蒟蒻却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. cuda float atomic操作

    atomic add.用第二个,暂时还没弄明白 #ifdef FLOAT #define T float #else #define T int #endif #ifdef FORUM __devic ...

  2. sublime text3前端常用插件

    安装Package Control 在安装插件之前,需要让sublime安装Package Control.打开Sublime Text的控制台,快捷键ctrl + ~,在控制台中输入以下代码. im ...

  3. Fiddler常用配置

    过滤目标地址: 抓取https的设置:

  4. Spring 与CXF整合(spring3.2,cxf3.1.11)

    1,jar包导入,从官网下载zip文件后里面会有很多jar包,哪些必须哪些不是必须,我能力有限,从其他人那参考了导入的一下jar包. 2.配置相关文件 web.xml中配置servlet <se ...

  5. 洛谷1345 [Usaco5.4]奶牛的电信

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  6. 微信小程序的开启授权,当单机取消授权后 再次授权

    //单机去搜索 toSearch:function(){ this.getLocation(res => { console.log('成功') wx.navigateTo({ url: `.. ...

  7. HTTP——状态码

    (转载) 完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b ...

  8. 如何查询mysql中是否表被锁

    可直接在mysql命令行执行:show engine innodb status\G;(只能通过cmd或者shell登录mysql) 查看造成死锁的sql语句,分析索引情况,然后优化sql然后show ...

  9. 没用私服,自己安装下本地jar包,制作坐标

    没用私服的话,自己安装下本地jar包吧.执行下面命令即可. -Dfile 代表jar存在路径.mvn install:install-file -DgroupId=alipay -DartifactI ...

  10. c++ string类的完整实现!!!

    本文实现了c++ STL中的basic_string模板类,当然.通过typedef也就实现了string类和wstring类.限于篇幅,实现代码中用到了标准库的char_traits模板类,本人自己 ...