题目大意:一个数组,四种操作: 模拟这四种操作。 题目分析:三种更新操作,一种询问操作。三种更新实际上是两种,add更新(等差数列做加减运算仍是等差数列)和set更新,add更新的懒标记记录首项、尾项和公差。 代码如下: ...
题目大意:有n个花瓶,每个花瓶中只能放一朵花。两种操作,一种是从A开始放F朵花,如果有的花瓶中已经有花则跳过这个花瓶,往下一个花瓶放;第二种是将区间[A,B]之间花瓶中的花清空。如果是第一种操作,输出这次放的花的左右端点;如果是第二种操作,输出这次总共清理出了多少支花。 题目分析:建立线段树,节点维 ...
分类:
其他好文 时间:
2016-05-28 06:28:55
阅读次数:
208
题目链接:http://poj.org/problem?id=3237 一棵有边权的树,有3种操作。 树链剖分+线段树lazy标记。lazy为0表示没更新区间或者区间更新了2的倍数次,1表示为更新,每次更新异或1就可以。 熟悉线段树成段更新就很简单了,最初姿势不对一直wa,还是没有彻底理解lazy标 ...
分类:
其他好文 时间:
2016-05-23 20:56:17
阅读次数:
245
点击打开链接
题意:中文题目
思路:这还是第一次写这样的线段树,个人感觉是一种套路之前没做过,但是思想什么巧妙,将一颗树转化成线段树真厉害,先是将每个节点的下面的所有数进行dfs编序号,并将他们的左右编号记下来,也就是我的代码中的L和R,而val记录的是根节点0到当前位置的费用,建树之后就很好操作了,更新时便找到当前节点的儿子和自己代表的区间,然后区间更新,注意题目说更新一个节点的值变为y,我...
分类:
其他好文 时间:
2016-05-22 12:25:19
阅读次数:
140
算是我真正意义上的区间更新的第一题,我是这样理解区间更新的:
为了节省时间,在更新区间的时候不必每次都更新到叶子节点。如果当前节点的的区间被包含在查询区间内,就暂时只更新这个节点。但是如果仅仅这样,将来在下次更新的时候,如果涉及了该节点的孩子节点,就会出错。
所以有一个办法:在更新的时候,如果我们明确知道了该节点的儿子节点涉及到了将要更新的区间,就事先把它的左右儿子节点按照父节点的val更新了...
分类:
其他好文 时间:
2016-05-12 21:29:56
阅读次数:
163
题意:
给一个长度n的字符串,q次操作,每次操作把[l,r]排序,k=0非递增,k=1非递减。
题解:
采用计数排序的复杂度是O(n?q)O(n*q),无法通过,但有所启示。
可以看出计数就是区间求和,排序就是区间更新,可以用线段树维护。
做法是建立26棵线段树,第i棵树维护第i个字母的位置信息。
计数时,在26棵线段树内分别做一次查询,排序时根据递增还是递减,把相应的区间赋值为相应的字...
分类:
其他好文 时间:
2016-05-12 21:06:16
阅读次数:
211
士兵杀敌(四)
时间限制:2000 ms | 内存限制:65535 KB
难度:5
描述
南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的...
分类:
其他好文 时间:
2016-05-12 20:45:23
阅读次数:
153
题意对于一个给定的序列有3种操作:
1.给一个区间的数乘c
2.给一个区间的数加c
3.查询区间和。思路就是普通的线段树区间更新,因为更新操作有两种,维护两个延迟标记就可以了,不过要注意乘和加在更新时相互之间的关系,在更新乘的时候之前加的数也要相应的乘,更新加的时候之前所乘的数没有改变。代码#include
#include
#include <ios...
分类:
其他好文 时间:
2016-05-12 15:09:07
阅读次数:
163
Mobile phones
Time Limit: 5000MS
Memory Limit: 65536K
Total Submissions: 17661
Accepted: 8173
Description
Suppose that the fourth generation mobile phone base station...
分类:
编程语言 时间:
2016-05-07 10:14:46
阅读次数:
209