UVA 12299 RMQ with shifts】的更多相关文章

p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: "Times New Roman"; font-size: 10.5000pt } h3 { margin-top: 5.0000pt; margin-bottom: 5.0000pt; text-align: left; font-family: 宋体; font-weight: bold; font-size: 1…
线段树,没了.. ----------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cctype>    #define rep(i,n) for(int i=0;i&l…
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3720 题意:给你一个可变的数组A,有两种操作.操作一:shift(i1, i2....in),将数组中这些元素的值变为(A[i2], A[i3]....A[in], A[i1]),操作二:Query(L, R), 查询A[i](L<=i <=R)的和. 题中 Each…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师…
就是线段树的单点修改和区间查询. 然而输入打了一个小时才弄清楚. #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MN 100000 #define R return #define INF 0x3f3f3f3f char ch; inline int read(){ ; ch=getchar(); ') ch=getchar(); + ch - ',c…
改动的时候因为数据非常小,所以能够直接暴力改动,查询的时候利用线段树即可了. 14337858 option=com_onlinejudge&Itemid=8&page=show_problem&problem=3720" style="font-size:13.1428575515747px; margin:0px; padding:0px; color:rgb(153,0,0); text-decoration:none">12299 RMQ…
RMQ with Shifts 时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 描述 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R) (L<=R), we report the minimum value among A[L], A[L+1], …, A[R]. Note that…
RMQ with Shifts 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述     In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R) (L<=R), we report the minimum value among A[L], A[L+1], …, A[R]. Note that the ind…
RMQ with Shifts Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Practice NBUT 1113 Description In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R) (L<=R), we report…
C. RMQ with Shifts Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 131072KB   64-bit integer IO format: %lld      Java class name: Main     In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (…
因为shift操作中的数不多,所以直接用单点更新模拟一下就好了. 太久不写线段树,手好生啊,不是这错一下就是那错一下. PS:输入写的我有点蛋疼,不知道谁有没有更好的写法. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; + ; ); const int INF…
题目链接:https://vjudge.net/contest/147973#problem/C 题意:传统的RMQ是一个不变的数组a求区间最值.现在要循环移动(往前移动). 分析:求区间问题,很容易想到线段树,移动就相当于单点更新. 建树,有两种方案,第一种是nlogn,就是不断的更新,更新logn,有n个数. #include <bits/stdc++.h> using namespace std; ; <<; int op, qL, qR, p, v; //qL,qR询问区间…
首先讲一下RMQ算法的意思. RMQ(Range Minimum Query,RMQ)范围最小值,给出一个n个元素的数组,计算min(A[L],A[L+1],...,A[R-1],A[R]): 这里运用了dp,先构建d[i][j]表示第i位开始2^j个元素中最小的值: 转移方程d[i][j]=min(d[i][j-1],d[i+2^(j-1)][j-1]): 建议画一张图来体验一下这个的意思. 实现: void RMQ_init(int n) { ;i<=n;i++) d[i][]=s1[i];…
范围最值问题,O(nlogn)的预处理,O(1)的查询. 这个题就是先对这些数列进行游程编码,重复的元素只记录下重复的次数. 对于所查询的[L, R]如果它完全覆盖了某些连续的重复片段,那么查询的就是这几种元素重复最多的次数,也就是RMQ. 如果[L, R]还覆盖了某一部分边界,也要单独计算取最大值. 还有个特殊情况就是查询区间都在某一个元素的重复片段中,答案直接就是R-L+1 #include <cstdio> #include <vector> #include <alg…
uva12299:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3720 题意:给你n个数,然后有两个操做,shift<a1,a2,a3.....ak>从左到右一次交换,即a1和a2交换,完了之后,a2和a3交换,以此类推.query<a1,a2>,查询a1到a2区间之间的最小值. 题解:一开始没有看懂题目,看错了,…
描述 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R) (L<=R), we report the minimum value among A[L], A[L+1], …, A[R]. Note that the indices start from 1, i.e. the left-most element is A[1]. In…
题目大意是给出一个非降序排列的数组,然后n个询问,每次询问一个区间内出现次数最多的数的次数. 首先要弄清楚题目的是一个非降序的数组,那么说明相等的数都会在一起,类似于11223334569这样的,那么可以将其合并,由于这种多次区间询问的题一般用 到的是线段树或者RMQ,所以就往这方面去靠,用num[i]和cont[i]表示第i段的数值和出现的次数,val[i]表示位置i所在段的编号,lef[i]和ri[i]表示位置i所在段的左右端点 位置,那么对于每次查询(l,r)区间就分成了三段,ri[l]-…
题目链接 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R)(L \leR), we report the minimum value among A[L], A[L + 1], ..., A[R]. Note that the indices start from 1, i.e. the left-most element is A[…
RMQ: 有一个不变的数组,不停的求一个区间的最小值. 使用倍增的思想优化到logN; d(i,j) 表示从 i 开始的,长度为2j的一段元素中的最小值. 那么状态转移方程: d(i,j) = min{ d(i,j-1) ,  d(i+2j-1,j-1) } 题目链接:https://vjudge.net/contest/146667#problem/B 题意:一个非降序的数组,询问(i,j)中出现次数最多的数值,所对应的出现次数是多少. 分析: 进行游戏编码,value[i] 和count[i…
代码: #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; const int Max=200010; int RMQ[Max+10]; int total[Max]; int sum[35]; int N,M,cnt; char ctr[35]; int bit(int x) {//每一个下标管辖的范围 ret…
题目大意:给一个整数上升序列,对于一系列询问区间(i,j),回答这段区间出现次数最多值所出现的次数. 分析:一个上升序列,相同的值聚集在一起,把相同的值的区间看作一个整体,假设这样的整体有n个,把他们编号. num[p]表示原下标下的数所在段的编号,left[p].right[p]表示所在段原下标的左右端点位置.编号后的数组 用RMQ求范围最大值.对于询问的区间(L,R)在编号后的数组中以以下三个部分的最大值:从L到L所在段的结束处 的元素个数(即right[L]-L+1).从R所在段的开始处到…
题目链接:题意:在传统的RMQ的基础上加上一个操作:shift(i1,i2,i3...ik),表示将这些元素,依次向左移动一位(训练指南247页) #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <queue> #include &l…
In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R) (L<=R), we report the minimum value among A[L], A[L+1], …, A[R]. Note that the indices start from 1, i.e. the left-most element is A[1]. In thi…
上次的湘潭赛的C题,用线段树敲了下还是WA,不知道为何,我已经注意了处理相同数据,然后他们当时用的RMQ. 所以学了下RMQ,感觉算法思想是一样的,RMQ用了DP或者是递推,由单个数到2^k往上推,虽然有部分重叠的,也没关系,因为RMQ是求区间最值嘛 然后这道题目,要把出现次数化为最值,构造一个新的数组来存贮出现次数,每次是在这个数组里面查询.细节处理要注意,比如所求的区间可能就在一个段里面,需要单独判断. #include <iostream> #include <cstdio>…
RMQ with Shifts 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 ->  Link1  <- -> Link2  <- 以上两题题意是一样的,只不过数据范围有所改动,代码改一下数组大小直接水过: 思路:典型的线段数单点更新+区间查询,只不过题目改动了一下,没有直接给出更新数据和查询区间,而是用字符串输入,所以只能将数据提取出来再进行操作,这道题线段数能做那么用RMQ肯定也能做,而且可能还更简洁:过的人并不多,大神们快点去A了它吧: #inclu…
在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据结构模板 ⊙基本数据结构 1.链表: 块状链表:没练过 Dancing Links:用于优化搜索.解决精确覆盖问题和重复覆盖问题的利器. Knuth教授的始祖论文:Dancing Links中文版 Dancing Links介绍(这篇对DLX的工作过程演示的很详细) DLX——Dancing Links(这篇…
说明:这是去年写了一半的东西,一直存在草稿箱里,今天整理东西的时候才发现,还是把它发表出来吧.. 以下所有题目来自Lrj的<训练指南> LA 2191 单点修改,区间和  Fenwick直接搞 UVa 12299 给出n个数,支持循环移动某些数(<30个),然后问区间最小值 因为移动小于30个数,所以直接单点修改就行,线段树. LA 4108 类似线段树,每次插入一个建筑时想线段树一样二分区间,当遇到一个完整的区间时,修改或返回,否则继续二分区间.Nlogn. UVa 11525 有题解…
题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2176 RMQ,就是范围最小值的缩写,这个算法是Tarjan 的 Sparse-Table 算法,复杂度为O(n*log(n)). 就是用数组d[i][j]表示范围[i,i+2^j-1]中的最小值. 然后有递推式 d[i][j] = min(d[i][j-1],d[i+2^(j-1…
vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释************************************************************ 题目大意:给出一个非降序排列的整数数组 a1,a2,a3,...,an,你的任务是对于一系列询问 (i, j),回答 ai,ai+1,...,aj 中出现次数最多的值所出现的次数. 输入格式:包含多组数据.每组…
UVA 12338 - Anti-Rhyme Pairs 题目链接 题意:给定一些字符串,每次询问求出两个字符串的最长公共前缀的长度 思路:把字符串排序,就能求出height和rank数组,然后利用RMQ查询就可以 代码: #include <cstdio> #include <cstring> #include <iostream> #include <string> #include <algorithm> using namespace s…