分析:两个不同方向开始跳跃,跳过数字相同,就相当于求回文子序列了。用dp求出从一个位置到另一个位置的最长回文子序列,相当于把[1-n]分成区间[1-x]和[x+1,n],结果就是两区间最长回文串子序列之和。枚举中间点i,求出max(dp[1,i]+dp[i+1,n])即得最终结果,回文非连续序列,从前往后,从后往前序列相同,求出区间内最长回文序列,由于是环,分成两部分,1~i,i+1~n,A可从i...
分类:
其他好文 时间:
2015-05-13 22:02:01
阅读次数:
152
题意:
查询区间和,重复的数字只计算一遍
思路:
先离线读入所有区间,然后按照区间右端点从小到大排序。
从数组的第一个数开始,依次修改bit直到每个区间的右端点,然后bit求区间和。
修改方式:用一个map记录当前数字是否已经出现过以及出现过的上一个位置,然后将该位置改为0,并更新一下map即可。
(因为一旦出现重复数字,其实只有该区间中的最后一个数字是起作用的,在他之前的都应该忽略,...
分类:
编程语言 时间:
2015-05-13 13:01:11
阅读次数:
112
分析:线段树的应用,区间修改,使用延迟标记进行延迟修改。
#include
using namespace std;
#define N 100010
class SegmentTree
{
private:
struct Node
{
int left,right; //左右子节点
int sum; //区间和
int lazy; ...
分类:
其他好文 时间:
2015-05-03 16:06:09
阅读次数:
126
这道题网上很多代码是错误的,但是可以AC。
比如这组数据
10 3
p 0 9
r 0 5
r 6 9
输出应该是 0 1 1
所有有的人直接记录该区间是否被覆盖过的方法是错误的
正确方法应该是记录这段区间的最小高度(就是最接近初始位置的高度),和最小高度对应的最长左区间和右区间
开一个sum记录这段区间最小高度的块数,min_v 记录该区间最小高度
cover作为懒惰标记下推...
分类:
系统相关 时间:
2015-04-30 20:10:11
阅读次数:
240
题目链接:NYOJ 116 士兵杀敌(二)
这一个是线段树的入门级水题,本题要求我们给出某个区间的区间和。这个问题和线段树的单点更新还是基本一致的。只要把单点更新中的值覆盖变为值得叠加,这一题便可以轻松解决了。如果不知道线段树的单点更新,请移步:传送门
【代码如下】...
分类:
其他好文 时间:
2015-04-30 09:01:59
阅读次数:
182
问题:
1. 给定一个源区间[x,y]和N个无序的目标区间[x1,y1] [x2,y2] ... [xn,yn],判断源区间[x,y]是不是在目标区间内。
2. 给定一个窗口区域和系统界面上的N个窗口,判断这个窗口区域是否被已有的窗口覆盖。
1. 解法:
先用区间的左边界值对目标区间进行排序O(nlogn),对排好序的区间进行合并O(n),对每次待查找的源区间,...
分类:
其他好文 时间:
2015-04-21 09:53:38
阅读次数:
135
题目大意:给出n个正整数的序列,要求你找出符合sum(a1 + a2 + a3 + … + an) * min(a1,a2,…,an)的最大值,如果有多个符合条件的,输出最短序列解题思路:从输出中观察得到,输出的答案要有三个,最大值,左端点,右端点。
那就设两个数组,纪录已当前数位最小值所能覆盖的最大区间,然后枚举每个数,求出区间和再乘上当前数求得值再进行比较
设置左右区间时,可以递归比较,假设...
分类:
其他好文 时间:
2015-04-18 10:08:59
阅读次数:
100
预处理一下每个元素左边和右边最近的相邻元素。对于一个区间[l, r]和区间内某一个元素,这个元素在这个区间唯一当且仅当左右两边最近的相邻元素不在这个区间内。这样就可以O(1)完成查询。首先查找整个字符串是否有唯一元素,如果没有则整个序列是无聊的。有的话,假设这个唯一元素下标是p,那么如果子序列[0,...
分类:
其他好文 时间:
2015-04-16 14:06:11
阅读次数:
148
题意 中文
动态区间和问题 只会更新点 最基础的树状数组 线段树的应用
树状数组代码
#include
using namespace std;
const int N = 50005;
int c[N], n, m;
void add(int p, int x)
{
while(p <= n)
c[p] += x, p += p & -p;
}
int...
分类:
编程语言 时间:
2015-04-14 14:46:01
阅读次数:
147
题意求区间内比h小的数的个数将所有的询问离线读入之后,按H从小到大排序。然后对于所有的结点也按从小到大排序,然后根据查询的H,将比H小的点加入到线段树,然后就是一个区间和. 1 #include 2 #include 3 #include 4 #include 5 #include 6 ...
分类:
其他好文 时间:
2015-04-04 12:03:13
阅读次数:
133