面试题:小明看花

题目:小明有一个花园,花园里一共有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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值