Range of numbers
- 题目说明
问题描述
查询给定一个长度为n和q的整数数组。
对于每次查询,返回元素k的起始位置和结束位置(位置从0开始计数)。
如果数组中不存在元素,则返回“-1-1”。
数据输入
第一行包含整数n和q,表示数组的长度和查询数。
第二行包含n个整数a1,a2…,an,表示完整数组。
接下来的q行(每行包含一个整数k)表示一个查询元素。
数据输出
总共有q行,每行包含两个整数,表示要查找的元素的起始位置和结束位置。
如果数组中不存在元素,则输出“-1-1”。
Sample Input
6 3
1 2 2 3 3 4
3
4
5
Sample Output
3 4
5 5
-1 -1
- 分析
最简单的一个思路,将数组反转,求最左位置,再转换为最右的位置。
- 代码
include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
int main()
{
int size,n;
int left,right;
cin >> size>>n;
ll *S=new ll[size];
ll *S1=new ll[size];
for(int i=0;i<size;i++)
{
cin>>S[i];
}
for(int i=0;i<n;i++)
{
cin>>S1[i];
//cout <<"i:"<<i<<"temp:"<<temp<<endl;
}
int j;
for(int i=0;i<n;i++)
{
for(j=0;j<size;j++)
{
if (S[j]==S1[i])
{
break;
}
}
if (j<size)
left =j;
else
left =-1;
for(j=size-1;j>-1;j--)
{
if (S[j]==S1[i])
{
break;
}
}
if (j>-1)
right =j;
else
right =-1;
cout<<left<<" "<<right<<endl;
}
return 0;
}
仅仅提供一种最简单的解法,新手上路。