《算法竞赛入门经典-训练指南》P198记录一下区间的左右边界就可以了#include #include #include #include #include #include #include #include #include #include #define INF 0x7fffffff#define N 100010#define M 1000010#define LL long long#define mod 95041567using namespace std;int arr[N];int num[N][3];int dp[N][20];void RMQ_init(int len)
转载
2013-10-14 09:48:00
145阅读
题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数。 代码: /* rmq算法 当询问到x,y时,设在x之后并且与a[x]相同的最后一个数编号为t,那么x到t之间的数一定相同,t-x+1可能是答案;t+1到y之间的最大连续个数也可能是答案。那么我们设两个数组,
转载
2016-08-22 11:42:00
132阅读
2评论
洛谷 UVA11235 https://www.luogu.org/problemnew/show/UVA11235 洛谷 SP1684 https://www.luogu.org/problemnew/show/SP1684 Description You are given a sequence
转载
2019-07-12 19:35:00
62阅读
POJ_3368
本来想找个RMQ问题练一下今天刚学的ST算法,结果这个题我用ST做不出来,所以只好又用回线段树解法了。
当然dicuss里面有人说也可用ST去做的,我就只说一下我用线段树去做的思路吧。
首先,如果a[i]==a[j]的话,自然输出j-i+1就可以了,如果a[i]!=a[j],如果我们直接查询a[i]、a[j]之间的所有整数出现的频率的最大值,显然是有问题的
转载
2012-02-06 15:41:00
53阅读
2评论
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace st\
原创
2022-09-09 10:21:00
49阅读
/* 题意: 有一组不下降的数 a1...an ,查询[s,t]区间内相同元素出现次数的最大值 思路: 首先对给出的原序列 origin 进行统计,将相同的数字放进同一组内:group[i][0],group[i][1], 记录在原序列中该组起点和终点的位置. 再记录原序列每个元素分别属于哪一组 之后就是查询[s,t], 假定元素origin[s],origin[t]分别属于 l_group, r_group组 注意到序列是不下降的,于是有3种可能性: 1.如果元素origin[s],origin[t]属于同一个组,那么该组长度就是我们想要的答 案 t-s+1; 2.如果元素or...
转载
2011-07-22 16:49:00
37阅读
2评论
D. Frequent valuesTime Limit:3000msCase Time Limit:3000msMemory Limit:131072KB64-bit integer IO format:%lld Java class name:Main2007/2008 ACM Internat...
转载
2014-07-13 22:02:00
78阅读
2评论
You are given a sequence of n integers a1, a2, . . . , an in non-decreasing order. In addition to that, youare given several queries consisting of indices i a
原创
2022-08-10 10:36:24
89阅读
http://poj.org/problem?id=3368 1 #include 2 #include 3 #include 4 #include 5 #define maxn 100100 6 using namespace std; 7 8 int a[maxn],f[maxn][30],n,q,x,y,b[maxn]; 9 10 int main()11 {12 while(scanf("%d",&n)!=EOF)13 {14 if(n==0) break;15 scanf("%d",&q);16 memset(...
转载
2014-02-19 18:53:00
35阅读
2评论
原题链接 考察:线段树 or 思维+RMQ ####思路一: 用线段树解法比较容易理解.$cnt$记录$[l,r]$区间的最大次数.它可以由子区间的cnt推来,如果左子区间的右端点 = 右子区间的左端点,那么也可以由左子区间的右连续最大长度+右子区间左连续最大长度推来. 需要注意的是查询和push_
转载
2021-06-28 23:53:00
127阅读
2评论
Frequentvalues TimeLimit:3000MsYouaregive...
转载
2015-10-24 13:04:00
192阅读
Frequent valuesTime Limit:2000MSMemory Limit:65536KTotal Submissions:11540Accepted:4206DescriptionYou are given a sequence ofnintegersa1, a2, ... , anin non-decreasing order. In addition to that, you are given several queries consisting of indicesiandj(1 ≤ i ≤ j ≤ n). For each query, determine the m
转载
2013-07-31 00:38:00
104阅读
2评论
很像majority element III, 但是那道题有O(k) extra space的限制,这里没有。有任意extra space, 同时知道elem range情况下,bucket sort最节省时间 语法上注意第5行,建立一个ArrayList的array,后面没有泛型generic L
转载
2016-11-24 06:51:00
108阅读
2评论
题目链接:uva 11235 - Frequent values题目大意:给定一个非降序的整数数组。要求计算对于一些询问(i,j)。回答ai,ai+1,…,aj中出现最多的数出现的次数。解题思路:由于序列为非降序的。所以同样的数字肯定是靠在一起的,所以用o(n)的方法处理处每段同样数字的区间。然后对...
转载
2015-07-21 18:00:00
44阅读
蓝书P198原题#include <cstdio>
int num[maxn], cnt[max...
原创
2022-08-17 15:42:50
53阅读
题意:求区间最大频数思路:半暴力扫描+RMQ#include <cstdio>#include <cstring>#inmespace std;const int maxn = 1e5 + ...
原创
2022-08-17 15:53:12
67阅读
Description
You are given a sequence of n integers a1 , a2 , … , an in non-decreasing order. In addition to t
原创
2022-08-10 10:18:07
28阅读
Description
原创
2022-11-09 18:51:18
49阅读
题意:给出一个非降序排列的整数数组a1,a2,...an,你的任务是对于一系列询问(i, j),回答ai,ai+1,...aj中出现最多次数的值所出现的次数?思路:将原始序列处理一下,令f[i]为记录当前i连续的个数,对于每个询问区间(l,r)将它分为两个部分,一个部分为l到它第一个不相同的数,之后的部分直接RMQ查询,然后取最大值即可Trick;在区间查询的时候没有留意有L>R的情况,W
原创
2023-06-12 14:10:09
25阅读
范围最值问题,O(nlogn)的预处理,O(1)的查询。这个题就是先对这些数列进行游程编码,重复的元素只记录下重复的次数。对于所查询的[L, R]如果它完全覆盖了某些连续的重复片段,那么查询的就是这几种元素重复最多的次数,也就是RMQ。如果[L, R]还覆盖了某一部分边界,也要单独计算取最大值。还有...
转载
2015-03-17 20:20:00
91阅读
2评论