题意:。。。
策略如题。
思路:我们先假设只求某一区间的最大值,我们只需要利用线段树的模板,只需要初始化和询问的时候小小的修改一下,改成祖先结点储存的不再是子节点的和而是两个子节点之间的最大值,这样我们可以求出最大值了,最小值也是这样求。
注意:因为询问的时候既要求最大值又要求最小值,所以要返回结构体。
代码:
#include
#include
#define M 100005...
分类:
其他好文 时间:
2014-09-29 01:29:28
阅读次数:
302
本题是利用后缀数组求最长的回文串。方法是将字符串反转之后拼接到原来的字符串末尾,中间用一个没有出现过的分割符隔开,原因是防止最长公共前缀横跨两个串。之后分别枚举回文串的中点,以及回文串长度是奇数还是偶数,看一下对应位置的最长公共前缀即可。这里的求最长公共前缀要处理RMQ问题,线段树固然可以解决,但是...
分类:
其他好文 时间:
2014-09-26 22:10:08
阅读次数:
142
UVA12299 - RMQ with Shifts(线段树)
题目链接
题目大意:要求你查询某一段的最小值,但是还有一个shift操作,将(a0, a1, a2, a3..ak)这个K个位置的数字互相对掉,例如a0位置的值变成a1,a1位置的值变成a2...ak位置的值变成a0.
解题思路:因为shift后面的操作数最多30个,所以可以用线段树单点修改。复杂度n*logn。用s...
分类:
其他好文 时间:
2014-09-26 10:40:58
阅读次数:
199
链接:http://poj.org/problem?id=3368
题意:给你一个序列,n个数,序列是有序的,q个询问,问区间(l,r)中出现频率最高的数字出现了几次。
思路:因为序列是有序的,可以把序列相同部分合并,然后存成一个新的数组,并增加一个值num表示数字出现的次数,找区间(l,r)中出现频率最高的数字,就是找num的最大值了,区间最大值,RMQ可做,线段树也可做,我用RMQ...
分类:
其他好文 时间:
2014-09-25 14:14:28
阅读次数:
147
Uva 12299 RMQ with Shifts(线段树 + 单点更新)题意: 对于给定的序列 x[i]给出一个操作 shift(a,b,c,d,e) 对应的是将 x[a]与x[b] x[b]与x[c] 这样相邻的两两交换For example, ifA={6,2, 4,8,5, 1,4}then...
分类:
其他好文 时间:
2014-09-25 02:49:27
阅读次数:
392
士兵杀敌(三)
时间限制:2000 ms | 内存限制:65535 KB
难度:5
描述
南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。
所以,南将军经常问军师小工第i号士兵到第j号...
分类:
其他好文 时间:
2014-09-23 23:03:09
阅读次数:
184
RMQ和线段树都能过,而且时间都500MS左右。
这道题主要还是思路的问题,特殊处理l,r所在的区间,中间的区间就用线段树区间求最值解决,想上去了代码很好实现。
RMQ代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using name...
分类:
其他好文 时间:
2014-09-22 20:35:53
阅读次数:
127
士兵杀敌(二)
时间限制:1000 ms | 内存限制:65535 KB
难度:5
描述
南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。
小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。
南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。
...
分类:
其他好文 时间:
2014-09-21 20:49:31
阅读次数:
225
士兵杀敌(一)
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描述
南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。
小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。
注意,南将军可能会问很多次问题。
输入只有一组测试数据
第一行是两个整数N,M,其...
分类:
其他好文 时间:
2014-09-20 23:11:09
阅读次数:
324