RMQ
文章平均质量分 84
围巾的ACM
啊啊什么时候也能成为一个大牛啊
展开
-
poj3264 Balanced Lineup(RMQ裸题)
思路:熟悉RMQ的题目,求区间最大值减去最小值 #include #include #include using namespace std; const int maxn = 50000+100; int dmax[maxn][20]; int dmin[maxn][20]; int d[maxn]; void initmax(int n,int d[]) { for (int i原创 2016-03-02 15:38:54 · 470 阅读 · 0 评论 -
hdu5726 GCD(二分+RMQ)
思路:首先要知道的是不同区间的GCD会随着右端点延伸GCD是单调不增的,那么考虑枚举左端点,然后二分当前GCD看看最多能延伸到哪里,然后统计当前GCD数量,可以先把所有区间GCD预处理出来然后用map存,因为公因子不会太多 #include using namespace std; const int maxn = 100000+500; #define LL long long int原创 2016-07-20 09:46:58 · 760 阅读 · 2 评论 -
CodeForces 602B Approximating a Constant Range(RMQ)
题意:给你n个数,要求你找到最长的区间,使得这个区间的最大值减去最小值之差的绝对值小于等于1 思路:枚举每一个数,以这个数为这个区间的最小值,能够往左边延伸多少,往右边延伸多少,再枚举每一个数,以这个数为区间的最大值,能够往左边延伸多少,往右边延伸多少就好了 #include using namespace std; const int maxn = 100000+100; int n原创 2016-05-16 22:05:06 · 547 阅读 · 0 评论 -
CodeForces 599C Day at the Beach(RMQ)
题意:给你n个数,问你最多分成多少块,使得在块内单独排序之后,然后再组合起来的结果和最后排序的结果一样 思路:扫一遍,如果这个块的最大值比下一个块的最小值小的话那么就ans++,用个RMQ就可以了 #include using namespace std; const int maxn = 1e5+6; int rmq[maxn][20]; int a[maxn],n; void in原创 2016-05-13 14:32:20 · 375 阅读 · 0 评论 -
CodeForces 6E Exposition(二分+RMQ)
题意:一串序列,求最长的区间,使得区间最大减去区间最小的差不超过k 思路:枚举起点,二分终点,然后RMQ一下 #include using namespace std; const int maxn = 1e5+100; int n,k; int dmax[maxn][20]; int dmin[maxn][20]; int d[maxn]; void initmax(int n,in原创 2016-04-06 23:08:11 · 578 阅读 · 0 评论 -
POJ 2452 Sticks Problem(二分+RMQ)
题意:给定一串数列,求满足ai(ak不一定是有序的)的最大j-i,即端点为这段序列的最小值和最大值。 思路:二分+RMQ,可以这样做,枚举i,求出比a[i]小的第一个数字的下标r,那么在[i,r]范围内找到最大值的下标k,那么就可以更新答案了。那么为什么在求比a[i]小的第一个数字的时候可以用二分呢?因为rmq数组其实满足单调性的,所以可以二分 吐槽:一开始没看清题目就做..以为是求LIS..原创 2016-03-04 15:51:14 · 450 阅读 · 0 评论 -
POJ 2019 Cornfields(简单二维RMQ)
思路:二维RMQ #include #include #include using namespace std; const int MAXN=255; int val[MAXN][MAXN]; int dmin[MAXN][MAXN][8][8]; int dmax[MAXN][MAXN][8][8]; void initRMQ(int n,int m) { for(int i原创 2016-03-04 09:54:11 · 477 阅读 · 0 评论 -
HDU 2888 Check Corners(简单二维RMQ)
题意:给定一个n * m的矩阵,再给定q个询问,每次询问(r1,c1)为左上角,(r2,c2)为右下角的子矩形的最大值,并且判断该最大值是否出现在了这个子矩阵的4个顶角上? 思路:二维RMQ,不过要注意是无符号整数 #include #include #include using namespace std; const int MAXN =305; unsigned int val[原创 2016-03-04 09:57:31 · 934 阅读 · 0 评论 -
POJ 3368 Frequent Values(RMQ)
题意:给出一个非降序排列的整数数组a1,a2,...an,你的任务是对于一系列询问(i, j),回答ai,ai+1,...aj中出现最多次数的值所出现的次数? 思路:将原始序列处理一下,令f[i]为记录当前i连续的个数,对于每个询问区间(l,r)将它分为两个部分,一个部分为l到它第一个不相同的数,之后的部分直接RMQ查询,然后取最大值即可 Trick;在区间查询的时候没有留意有L>R的情况,W原创 2016-03-02 21:48:03 · 346 阅读 · 0 评论 -
HDU 3183 A Magic Lamp(RMQ)
题意:给定一串全是数字的字符,问你删除m个数字之后的最小值是多少 思路:因为要找n-m个数,删除m个数。所以原数的第1位到m+1位的数字中最小的那位(假设是第i位)肯定是n-m位数的第一位。(想想为什么) 这样我们就找到了第一位a[i],接下来我们在从第i+1位数到m+2位数中找最小的那位,这个肯定是n-m位数的第二位。 为什么呢,如果我们原来串有6个数字,要删除2原创 2016-03-02 19:58:02 · 287 阅读 · 0 评论 -
Educational Codeforces Round 15 E Analysis of Pathes in Functional Graph(倍增)
思路:由于是一个n个点n条边的有向图,并且题目的输入已经说明了每一条路径都是唯一的并且没有终点,所以可以用倍增的思想处理,令dp[i][j]为第i个节点然后走2^j这样做....没想到... #include using namespace std; #define LL long long const int maxn = 1e5+7; int fa[maxn][35]; LL min原创 2016-12-02 17:02:13 · 322 阅读 · 0 评论