B. Amr and The Large Array
2015-08-16 09:25
253 查看
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
解题说明:此题要求找出重复出现次数最多的数字,并且标记出该数字最前最后出现的位置。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
long long int a[1000005],b[1000005];
int main()
{
long long int i,t,l,r,n,max=-1,min=100000000,k;
scanf("%lld",&n);
for(i=1;i<=n;i++)
{
scanf("%lld",&t);
a[t]++;
if(a[t]==1)
{
b[t]=i;
}
if(a[t]>max)
{
max=a[t];
min=i-b[t];
l=b[t];
r=i;
}
else if(a[t]==max)
{
if((i-b[t])<min)
{
max=a[t];
l=b[t];
r=i;
min=r-l;
}
}
}
printf("%lld %lld\n",l,r);
return 0;
}
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<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
long long int a[1000005],b[1000005];
int main()
{
long long int i,t,l,r,n,max=-1,min=100000000,k;
scanf("%lld",&n);
for(i=1;i<=n;i++)
{
scanf("%lld",&t);
a[t]++;
if(a[t]==1)
{
b[t]=i;
}
if(a[t]>max)
{
max=a[t];
min=i-b[t];
l=b[t];
r=i;
}
else if(a[t]==max)
{
if((i-b[t])<min)
{
max=a[t];
l=b[t];
r=i;
min=r-l;
}
}
}
printf("%lld %lld\n",l,r);
return 0;
}
相关文章推荐
- 深入解析C语言中的内存分配相关问题
- leetcode 140 —— Word BreakII
- BZOJ1034
- LUCAS组合数公式
- 求二进制数中1的个数
- (大数据工程师学习路径)第四步 SQL基础课程----约束
- Android优化之图片优化
- POJ-3751 时间日期格式转换-24小时制/12小时制
- HDU 2046 骨牌铺方格(简单递推)
- iOS 开发 格式化日期时间
- 京东商城实战-构建亿级前端读服务 | 并发编程网 - ifeve.com
- 快速幂
- List泛型相互的转换的一些现象
- Activity的生命周期
- 打质因数表
- hdu 5387 Clock(分数)
- hdu 5385 The path(最短路+构造)
- hdu 5389 Zero Escape(dp)
- 打素数表(筛法)
- ios开发property详解