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. RIA技术

    Rich Internet Application(富互联网应用程序,简称RIA),一种全新的Web应用程序架构,它结合了桌面软件良好的用户体验和web应用程序易部署的优点,很快获得了企业的青睐. 近 ...

  2. Hack 【二分答案】

    题意:给出n门课程,每一门课程考的分数,每一门课程的学分,求最多删去k组数据之后能够得到的最大加权平均数 先开一个数组x[],其中x[i]=1代表没有删除这门课程,x[i]=0表示删除了这门课程 然后 ...

  3. C实现类封装、继承、多态

    1.  概述 C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来了的面向对象的语言,实际上,很多C++实现的底层是用C语言实现的,如在Visual C++中的Interface其实就是 ...

  4. ubuntu 11.04 源 更新不了,全显示ign、404

    原文地址:http://blog.csdn.net/enjio/article/details/11603373   ubuntu 11.04 源 更新不了 分类: 开发相关2013-09-12 14 ...

  5. Couchbase的web管理员后台 查看缓存提示警告 Warning: Editing of document with size more than 2.5kb is not allowed的解决方法

    这个警告仅仅只会发生在web管理员后台,实际在缓存中的数据是不会有影响的(好像默认单个key对应的缓存大小是20M) 但是有时候我们就是想在web后台里面看看到底保存了什么数据,怎么能突破这个限制呢? ...

  6. 移动金融APP分析

    最近研究了移动互联网金融APP的情况,分享给大家. 这是官方关于互联网金融的范围,包括支付.借贷.众筹.基金.保险和信托. 典型的APP 绑卡的流程普遍采用的四要素鉴权:姓名,身份证,卡号以及银行预留 ...

  7. pageX, clientX ,screenX, offsetX, layerX, ,x的区别

    事件对象event的位置属性,这些参数比较容易混淆 1. pageX,pageY :IE不识别的,鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化,其实就是clientY ...

  8. 【自动化测试】Selenium - 定位

    http://easonhan007.github.io/selenium/2014/01/10/se-secret_01/ 你应该遵照这个规则来选择定位元素的属性.name > id > ...

  9. 利用ICSharpCode.SharpZipLib.Zip进行文件压缩

    官网http://www.icsharpcode.net/ 支持文件和字符压缩. 创建全新的压缩包 第一步,创建压缩包 using ICSharpCode.SharpZipLib.Zip; ZipOu ...

  10. Java中HashMap的数据结构

    类声明: 概述: 线程不安全: <Key, Value>两者都可以为null: 不保证映射的顺序,特别是它不保证该顺序恒久不变: HashMap使用Iterator: HashMap中ha ...