題目:小明有一個花園,花園裏一共有m朵花,對於每一朵花,都是不一樣的,小明用1~m中的一個整數表示每一朵花,他很喜歡去看花,有一天他看了n次,並將n次他看花的種類是什麼按照時間順序記錄下來。記錄用a[i]表示,表示第i次他看了a[i]這朵花。小紅很好奇,她有Q個問題,問(l,r)的時間內,小明一共看了多少朵不同的花兒。
輸入:
- 輸入兩個數n,m(1=<n<=2000,1=<m=<100):分別表示n次看花,m表示一共有m朵花兒
- 輸入n個數a[1]~a[n],a[i]表示第i次,小明看的花的種類
- 輸入一個數Q(1=<Q=<1000000),表示小紅的問題數量
- 輸入Q行,每行兩個數(r(1=<l=<r=<n))表示小紅想知道在第l次到第r次,小明一共看了多少不同的花
輸出:
- 一共Q行
- 每一行輸出一個數,表示小明在(l,r)的時間內看了多少種花
樣例輸入:
5 3
1 2 3 2 2
3
1 4
2 4
1 5
樣例輸出:
3
2
3
代碼:
代碼用的是最粗暴的方法,而且數據類型被我定義成了int,實際上也有很大的問題,因爲n、m、甚至是Q,都是很大的值(最大的爲1000000),所以最好將數據類型定義爲long long型。。。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int main()
{
int n, m;
cout << "請輸入看花的次數n和花的種類m:";
cin >> n >> m;
vector<int> array(n);
int i,j;
cout << "請輸入n次看花的花的種類:";
for (i = 0; i < n; i++)
cin >> array[i];
//for (i = 0; i < n; i++)
//cout << array[i];
int Q;
cout << "請輸入小紅的問題個數:";
while (scanf("%d", &Q) != EOF)
{
vector<vector<int>> nQ(Q, vector<int>(2));
cout << "請輸入小紅的問題:";
for (i = 0; i < Q; i++)
{
for (j = 0; j < 2; j++)
scanf("%d", &nQ[i][j]);
}
int left, right;
map<int, int> item;
for (i = 0; i < Q; i++)
{
left = nQ[i][0];
right = nQ[i][1];
cout << left << right << endl;
for (j = left-1; j < right; j++)
{
//cout << left << right << endl;
cout << j << " ";
cout << "array[j]:"<<array[j]<<endl;
item[array[j]]++;
}
cout << "result:";
cout << item.size() << endl;
item.clear();
}
}
}