UVALive 5881 Unique Encryption Keys (DP)
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)的更多相关文章
- 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 ...
- Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II)
Leetcode之动态规划(DP)专题-63. 不同路径 II(Unique Paths II) 初级题目:Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机 ...
- Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths)
Leetcode之动态规划(DP)专题-62. 不同路径(Unique Paths) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向 ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
随机推荐
- Toast报错 android.content.res.Resources$NotFoundException
Toast.makeText(getActivity(), String.valueOf(position), Toast.LENGTH_SHORT) ...
- 如何使页面滚动条移动到指定元素element的位置处?
如何使页面滚动条移动到指定元素element的位置处? 在用selenium做测试时,会遇到需要操作的元素不在当前可视页面中的情况,如果是手工测试,自然很简单,手动拖拽滚动条到目标元素处即可. 那么, ...
- Windows系统下Memcached缓存系列二:CouchbaseClient(c#客户端)的详细试用,单例模式
在上一篇文章里面 ( Windows系统下Memcached缓存系列一:Couchbase(服务器端)和CouchbaseClient(c#客户端)的安装教程 ),我们介绍了服务器端的安装和客户端的安 ...
- [反汇编练习] 160个CrackMe之026
[反汇编练习] 160个CrackMe之026. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- Qt QGroupBox StyleSheet 边框设置
/**************************************************************************** * Qt QGroupBox StyleSh ...
- java金额的加减乘除
package com.wedge.edp.framework.common.util; import java.math.BigDecimal; /** * 金额的加减乘除 */ public cl ...
- 支持多种浏览器的纯css下拉菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- php 实现 jsonp 数据接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- Delphi 异或,英文为exclusive OR,或缩写成xor
异或,英文为exclusive OR,或缩写成xor 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: a⊕b = (¬a ∧ b) ∨ ...
- bjfu1287字符串输出的大水题
不多说 /* * Author : ben */ #include <cstdio> #include <cstdlib> #include <cstring> # ...