Codeforces 558B Amr and The Large Array
2015-07-15 20:52
274 查看
B. Amr and The Large Array
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Amr has got a large array of size n.
Amr doesn't like large arrays so he intends to make it smaller.
Amr doesn't care about anything in the array except the beauty of it. The beauty of the array is defined to be the maximum number of times that some
number occurs in this array. He wants to choose the smallest subsegment of this array such that the beauty of it will be the same as the original array.
Help Amr by choosing the smallest subsegment possible.
Input
The first line contains one number n (1 ≤ n ≤ 105),
the size of the array.
The second line contains n integers ai (1 ≤ ai ≤ 106),
representing elements of the array.
Output
Output two integers l, r (1 ≤ l ≤ r ≤ n),
the beginning and the end of the subsegment chosen respectively.
If there are several possible answers you may output any of them.
Sample test(s)
input
output
input
output
input
output
Note
A subsegment B of
an array A from l to r is
an array of size r - l + 1 where Bi = Al + i - 1 for
all 1 ≤ i ≤ r - l + 1
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Amr has got a large array of size n.
Amr doesn't like large arrays so he intends to make it smaller.
Amr doesn't care about anything in the array except the beauty of it. The beauty of the array is defined to be the maximum number of times that some
number occurs in this array. He wants to choose the smallest subsegment of this array such that the beauty of it will be the same as the original array.
Help Amr by choosing the smallest subsegment possible.
Input
The first line contains one number n (1 ≤ n ≤ 105),
the size of the array.
The second line contains n integers ai (1 ≤ ai ≤ 106),
representing elements of the array.
Output
Output two integers l, r (1 ≤ l ≤ r ≤ n),
the beginning and the end of the subsegment chosen respectively.
If there are several possible answers you may output any of them.
Sample test(s)
input
5 1 1 2 2 1
output
1 5
input
5 1 2 2 3 1
output
2 3
input
6 1 2 2 1 1 2
output
1 5
Note
A subsegment B of
an array A from l to r is
an array of size r - l + 1 where Bi = Al + i - 1 for
all 1 ≤ i ≤ r - l + 1
#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <string> #include <algorithm> #include <queue> #include <stack> #include <map> using namespace std; const double PI = acos(-1.0); const double e = 2.718281828459; const double eps = 1e-8; struct node { int num; int time; int l; int r; int range; } index[1000010]; int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int n; while(cin>>n) { map<int, int>g; g.clear(); memset(index, 0, sizeof(index)); int t; int d = 0; int dd; int maxd = 1; int maxtime = 0; int maxrange = 1; for(int i = 1; i <= n; i++) { scanf("%d", &t); if(g[t] != 0) { dd = g[t]; index[dd].time++; index[dd].r = i; index[dd].range = index[dd].r-index[dd].l+1; if(maxtime<index[dd].time || maxtime==index[dd].time&&maxrange>index[dd].range) { maxtime = index[dd].time; maxd = dd; maxrange = index[dd].range; } } else { g[t] = ++d; dd = g[t]; index[dd].num = t; index[dd].time = 1; index[dd].l = index[dd].r = i; index[dd].range = 1; if(maxtime < index[dd].time) { maxtime = index[dd].time; maxd = dd; maxrange = 1; } } } printf("%d %d\n", index[maxd].l, index[maxd].r); } return 0; }
相关文章推荐
- DT大数据梦工厂 第53讲
- android官方教程学习01——ActionBar1
- 层次遍历二叉树—vector的彪悍与神秘
- ES6 详解二: 新增内容概览
- opencv例程说明
- oracle怎么把系统时间与某个时间的差值与另一个数值进行比较
- hdu 1181 变形课
- 基于事件的隐式调用风格
- POJ 1258 Agri-Net //Prim算法
- 静态文件服务器(The static file servers)
- 使用Windows BitLocker进行安全磁盘加密
- uva 1366(dp)
- iOS中runtime运行机制解析
- ZOJ 2770 Burn the Linked Camp 差分约束
- Windows批处理:请求远程协助
- bzoj2154
- Eclipse常见操作
- Linux下的LVM管理
- Linux下的LVM管理
- Labview软件的特点