题意:给定一个数列,每次查询一个区间不同数的个数。

做法:离线+BIT维护。将查询按右端点排序。从左到右扫,如果该数之前出现过,则将之前出现过的位置相应删除;当前位置则添加1。这样做就保证每次扫描到的某一位置,以该位置为右端点的区间都相应地确定了。

 /*
*Author: Zhaofa Fang
*Created time: 2013-08-25-22.29 星期日
*/
#include <cstdio>
#include <cstdlib>
#include <sstream>
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <utility>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std; typedef long long ll;
typedef pair<int,int> PII;
#define DEBUG(x) cout<< #x << ':' << x << endl
#define FOR(i,s,t) for(int i = (s);i <= (t);i++)
#define FORD(i,s,t) for(int i = (s);i >= (t);i--)
#define REP(i,n) for(int i=0;i<(n);i++)
#define REPD(i,n) for(int i=(n-1);i>=0;i--)
#define PII pair<int,int>
#define PB push_back
#define ft first
#define sd second
#define lowbit(x) (x&(-x))
#define INF (1<<30)
#define eps (1e-8) const int maxq = ;
const int maxn = ;
int a[maxn],C[maxn],last[];
int ans[maxq];
void init(){
memset(C,,sizeof(C));
memset(last,-,sizeof(last));
}
struct Query{
int l,r;
int idx;
bool operator < (const Query & rhs)const{
return r < rhs.r;
}
}Q[maxq]; void add(int x,int val){
while(x<maxn){
C[x] += val;
x += lowbit(x);
}
}
int sum(int x){
int res = ;
while(x > ){
res += C[x];
x -= lowbit(x);
}
return res;
}
int main(){
//freopen("in","r",stdin);
//freopen("out","w",stdout);
int n;
while(~scanf("%d",&n)){
init();
FOR(i,,n)scanf("%d",&a[i]);
int q;
scanf("%d",&q);
REP(i,q){
scanf("%d%d",&Q[i].l,&Q[i].r);
Q[i].idx = i;
}
sort(Q,Q+q);
int pre = ;
REP(i,q){
FOR(j,pre,Q[i].r){
if(last[a[j]]==-){
add(j,);
}else {
add(last[a[j]],-);
add(j,);
}
last[a[j]] = j;
}
ans[Q[i].idx] = sum(Q[i].r)-sum(Q[i].l-);
pre = Q[i].r+;
}
REP(i,q)printf("%d\n",ans[i]);
}
return ;
}

最新文章

  1. 内存中OLTP与内存不足
  2. iOS开发之──传感器使用 (转载)
  3. 密码学初级教程(五)消息认证码MAC-Message Authentication Code
  4. BZOJ4417: [Shoi2013]超级跳马
  5. iOS单例模式
  6. thinkphp二维数组模板输出方法
  7. Label &amp; TextBlock
  8. Web应用程序安全必须重视八大问题
  9. 记一次npapi插件无窗口(windowless )化下的妙巧思路然后解决问题的超爽体验过程
  10. 配置NTP时间服务器
  11. 详细说明XML分解(两)—DOM4J
  12. 改造jQuery-Tagit 插件支持中文全角的逗号和空格
  13. PPTP-VPN日志功能,记录用户登录时间,流量统计,IP地址等信息
  14. poj 1873 凸包+枚举
  15. 【Django基本命令002】
  16. css 实现等分布局
  17. python 将mysql数据库中的int类型修改为NULL 报1366错误,解决办法
  18. Maya中输出alembic文件的方法
  19. 简易selenium自动化测试框架(Python)
  20. SOJ4389 川大贴吧水王 队列

热门文章

  1. C99新特性
  2. QJ系列笔记
  3. 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
  4. 转:Javascript异步编程的4种方法
  5. printdir-deldir-bmp
  6. dhtmlgrid修改,支持IE10
  7. 网易云课堂_程序设计入门-C语言_第六章:数组_2鞍点
  8. ASP.NET MVC 中将FormCollection与实体间转换方法【转】
  9. Sass介绍及入门教程
  10. bootstrapvalidator之API学习