Unique Encryption Keys

题目链接:

http://acm.hust.edu.cn/vjudge/problem/26633

Description


http://7xjob4.com1.z0.glb.clouddn.com/bced90d15c27e75270cc759651dcfa63

Input


The input contains several cipher descriptions. Each description starts with one line containing two
integer numbers M and Q separated by a space. M (1 ≤ M ≤ 1000000) is the number of encrypted
messages, Q is the number of queries (0 ≤ Q ≤ 1000000).
Each of the following M lines contains one number Ki (0 ≤ Ki ≤ 2
30) specifying the identifier of
a key used to encrypt the i-th message. The next Q lines then contain one query each. Each query is
specified by two integer numbers Bj and Ej , 1 ≤ Bj ≤ Ej ≤ M, giving the interval of messages we
want to check.
There is one empty line after each description. The input is terminated by a line containing two
zeros in place of the numbers M and Q.

Output


For each query, print one line of output. The line should contain the string “OK” if all keys used to
encrypt messages between Bj and Ej (inclusive) are mutually different (that means, they have different
identifiers). If some of the keys have been used repeatedly, print one identifier of any such key.
Print one empty line after each cipher description.

Sample Input


10 5
3
2
3
4
9
7
3
8
4
1
1 3
2 6
4 10
3 7
2 6
5 2
1
2
3
1
2
2 4
1 5
0 0

Sample Output


3
OK
4
3
OK
OK
1

Source


2016-HUST-线下组队赛-1


##题意:

给定一组序列并进行M次询问,每次询问一个区间是否有重复的数字,若有输出任意重复.


##题解:

dp[i]:区间以i为左端点时,最远能够达到并无重复数字的右端点.
对于i要找到最近的出现重复的位置,要么是i+1以后的重复,要么是num[i]本身出现重复.
转移方程:
dp[i] = min(dp[i+1], last_occ[num[i]]);
另外,感觉UVA上对着道题的特判有点问题.


##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define maxn 1010000
#define inf 0x3f3f3f3f
#define mod 1000000007
#define LL long long
#define mid(a,b) ((a+b)>>1)
#define IN freopen("unique.in", "r", stdin);
#define OUT freopen("unique.out", "w", stdout);
using namespace std;

int n,m;

int num[maxn];

int dp[maxn];

map<int,int> last;

int main()

{

//IN;

//OUT;

while(scanf("%d %d",&n,&m) != EOF && (m||n))
{
for(int i=1; i<=n; i++) {
scanf("%d", &num[i]);
} last.clear();
dp[n+1] = n + 1;
for(int i=n; i>=1; i--) {
dp[i] = dp[i+1];
if(last.count(num[i])) dp[i] = min(dp[i], last[num[i]]);
last[num[i]] = i;
} while(m--) {
int l,r; scanf("%d %d", &l,&r);
if(dp[l] > r) {
printf("OK\n");
} else {
printf("%d\n", num[dp[l]]);
}
}
printf("\n");
} return 0;

}

UVALive 5881 Unique Encryption Keys (DP)的更多相关文章

  1. Codeforces VK Cup Finals #424 Div.1 A. Office Keys(DP)

    显然是不可能交叉取钥匙的,于是把钥匙和人都按坐标排序就可以DP了 钥匙可以不被取,于是f[i][j]表示前i个钥匙被j个人拿的时间 f[i][j]=min(f[i-1][j],max(f[i-1][j ...

  2. Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II)

    Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II) 初级题目:Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机 ...

  3. Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths)

    Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向 ...

  4. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  5. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  6. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  7. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  8. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  9. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

随机推荐

  1. HTML xmlns

    xmlns 属性可以在文档中定义一个或多个可供选择的命名空间.该属性可以放置在文档内任何元素的开始标签中.该属性的值类似于 URL,它定义了一个命名空间,浏览器会将此命名空间用于该属性所在元素内的所有 ...

  2. [反汇编练习] 160个CrackMe之024

    [反汇编练习] 160个CrackMe之024. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  3. 【转】Mac 10.10 yosemite 安装samba替代系统samba组件 -- samba不错不错

    原文网址:http://gcell.blog.163.com/blog/static/52666594201501084530277/ 1.首先,在系统偏好设置的共享设置中,关掉局域网文件共享(去掉打 ...

  4. 【转】使用Python的IDE:Eclipse+PyDev

    原文网址:http://www.crifan.com/try_with_python_ide_eclipse_pydev/ 之前已经介绍过了一些基本知识: [整理][多图详解]如何在Windows下开 ...

  5. 【转】Eclipse和PyDev搭建完美Python开发环境(Ubuntu篇)

    原文网址:http://www.cnblogs.com/Realh/archive/2010/10/10/1847251.html 前两天在Windows下成功地搭好了一个Python开发环境,这次转 ...

  6. C#的Timer

    PowerCoder 原文 C#的Timer 再C#里现在有3个Timer类: System.Windows.Forms.Timer System.Threading.Timer System.Tim ...

  7. 二级缓存处理大数据 用ehcache.xml配置文件

    二级缓存大量数据的解决方案 数据很大 二级缓存 存储大数据,让 内存和磁盘文件进行交互,数据库中的不变的数据在磁盘上,这样就可以少和数据库进行交互了 ehcache.xml 放在src下 <eh ...

  8. Multi-Device Hybrid Apps for Visual Studio CTP2.0

    http://msdn.microsoft.com/en-us/library/dn771545.aspx http://www.microsoft.com/en-us/download/detail ...

  9. delphi 712 Word 2

    //导出Wordprocedure TFrm_Computing.ExportWord(aFileName: string; aFileType: string);var wordApp, WordD ...

  10. GIT 命令 操作 记录

    1.git pull时冲突的解决 1.git stash 2.git pull 3.git stash pop stash@{0} 4.修改冲突 5.git add . 6.git commit 7. ...