Codeforces Round #215 (Div. 2) B. Sereja and Suffixes map
2015-07-03 16:58
465 查看
B. Sereja and Suffixes
Time Limit: 20 SecMemory Limit: 256 MB
题目连接
http://codeforces.com/problemset/problem/368/BDescription
Sereja has an array a, consisting of n integers a1, a2, ..., an. The boy cannot sit and do nothing, he decided to study an array. Sereja took a piece of paper and wrote out m integers l1, l2, ..., lm (1 ≤ li ≤ n). For each number li he wants to know how many distinct numbers are staying on the positions li, li + 1, ..., n. Formally, he want to find the number of distinct numbers among ali, ali + 1, ..., an.?Sereja wrote out the necessary array elements but the array was so large and the boy was so pressed for time. Help him, find the answer for the described question for each li.
[b]Input[/b]
The first line contains two integers n and m (1 ≤ n, m ≤ 105). The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 105) — the array elements.
Next m lines contain integers l1, l2, ..., lm. The i-th line contains integer li (1 ≤ li ≤ n).
[b]Output[/b]
Print m lines — on the i-th line print the answer to the number li.
[b]Sample Input[/b]
10 10
1 2 3 4 1 2 3 4 100000 99999
1
2
3
4
5
6
7
8
9
10
[b]Sample Output[/b]
6
6
6
6
6
5
4
3
2
1
HINT
[b]题意[/b]
n个数,m次询问
每次询问,问你[l,n]有多少不同的数字
[b]题解:[/b]
用map就好了
我们离线做
[b]代码[/b]
#include <cstdio> #include <cmath> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <set> #include <vector> #include <sstream> #include <queue> #include <typeinfo> #include <fstream> #include <map> #include <stack> typedef long long ll; using namespace std; //freopen("D.in","r",stdin); //freopen("D.out","w",stdout); #define sspeed ios_base::sync_with_stdio(0);cin.tie(0) #define test freopen("test.txt","r",stdin) #define maxn 1050005 #define mod 10007 #define eps 1e-9 const int inf=0x3f3f3f3f; const ll infll = 0x3f3f3f3f3f3f3f3fLL; inline ll read() { ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } //************************************************************************************** int ans[maxn]; int a[maxn]; map<int,int> H; int flag=0; int main() { int n=read(),m=read(); for(int i=1;i<=n;i++) { a[i]=read(); H[a[i]]++; if(H[a[i]]==1) flag++; } for(int i=1;i<=n;i++) { ans[i]=flag; H[a[i]]--; if(H[a[i]]==0) flag--; } for(int i=1;i<=m;i++) { int x=read(); printf("%d\n",ans[x]); } }
相关文章推荐
- Css控制网页变灰
- 【Hadoop】HDFS的运行原理
- SharePoint 2013 如何配置 报表数据源(RSDS)--在线设计BI图表
- 仿iOS自定义SwitchButton
- Source Insight 的应用技巧
- linux couldn't resolve host or ping: unknown host解决办法
- 仿iOS自定义SwitchButton
- ASP 一般处理程序知识点
- 用原生js模仿jquery
- LeetCode-Factorial Trailing Zeroes-解题报告
- [UIBarButtonItem appearance] 设置BackBarButtonItem的图片
- 面试题31:连续子数组的最大和
- HDU5044 2014上海网络赛1003 tree
- 双向触发二极管
- node入门3----路由
- Winform 中DataGridView的checkbox列,当修改checkbox状态时实时获得其状态值
- Java中的简单工厂模式
- 纽巴伦 2015新款小蛮腰系列被美国杂志《跑者世界》评为“推荐产品”
- 笔记本上的Ubuntu挂了几天
- SAP产品成本计算流程