360公司2019编程题"看花"问题

360公司2019编程题"看花"问题

  • 题目描述:
    小明有一个花园,花园里面一共有m朵花,对于每一朵花,都是不同的,小明用1~m中的一个整数表示每一朵花。

他很喜欢去看这些花,有一天他看了n次,并将n次他看花的种类是什么按照时间顺序记录下来。ios

记录用a[i]表示,表示第i次他看了a[i]这朵花。web

小红很好奇,她有Q个问题,问[l,r]的时间内,小明一共看了多少朵不一样的花儿,小明由于在忙着欣赏他的花儿,因此想请你帮他回答这些问题。编程

  • 输入描述
    输入两个数n,m;(1<=n<=2000,1<=m<=100);分别表示n次看花,m表示一共有m朵花儿。

接下来输入n个数a[1]~a[n],a[i]表示第i次,小明看的花的种类;svg

输入一个数Q(1<=Q<=1000000);表示小红的问题数量。spa

输入Q行 每行两个数l,r(1<=l<=r<=n);表示小红想知道在第l次到第r次,小明一共看了多少不一样的花儿。code

  • 输出描述
    一共Q行

每一行输出一个数 表示小明在[l,r]的时间内看了多少种花。xml

  • 输入示例
    5 3
    1 2 3 2 2
    3
    1 4
    2 4
    1 5
  • 输出示例
    3
    2
    3
#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main()
{
	vector<int> vec;
	vector<int> result;
	set<int> s;
	int n, m;
	cin >> n >> m;
	while (n > 0)
	{
		int x;
		cin >> x;
		if (x > 0 && x <= m)
		{
			vec.push_back(x);
			n--;
		}
		else
		{
			cout << "输入有误" << endl;
			return -1;
		}

	}
	int question;
	cin >> question;
	while (question > 0)
	{
		s.clear();
		int l, r;
		cin >> l >> r;
		for (int i = l - 1; i < r; ++i)
		{
			s.insert(vec[i]);
		}
		result.push_back(s.size());
		question--;
	}
	for (auto it : result)
	{
		cout << it << endl;
	}
	system("pause");
	return  0;
}

大体思路
利用vector和set容器去重的特色,结合在一块儿统计一段时间看花的种类,奈什么时候间超时,经过率53.3%ci