------------恢复内容开始------------

HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一
段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一
个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答。。。因为项链实在是太长了。于是,他只
好求助睿智的你,来解决这个问题。

Input

第一行:一个整数N,表示项链的长度。 
第二行:N个整数,表示依次表示项链中贝壳的编号(编号为0到1000000之间的整数)。 
第三行:一个整数M,表示HH询问的个数。 
接下来M行:每行两个整数,L和R(1 ≤ L ≤ R ≤ N),表示询问的区间。
N ≤ 50000,M ≤ 200000。

Output

M行,每行一个整数,依次表示询问对应的答案。

Sample Input6 1 2 3 4 3 5 3 1 2 3 5 2 6

Sample Output2 2 4

思路:离线操作,将r排序,利用树状数组快速求和,维护一个pre数组,在i加入时,pre[i]就要减1

#define lowbit(x) ((x)&(-x))
typedef long long LL; const int maxm = 1e6+;
const int maxn = 5e4+; int C[maxn], pre[maxm], N, M, a[maxn], ans[]; struct Node {
int l, r, id;
bool operator<(const Node &t)const {
return r < t.r;
}
}query[]; void add(int x, int val) {
for(; x <= N; x += lowbit(x))
C[x] += val;
} int getsum(int x) {
int ret = ;
for(; x; x -= lowbit(x))
ret += C[x];
return ret;
} int main() {
scanf("%d", &N);
for(int i = ; i <= N; ++i)
scanf("%d", &a[i]);
scanf("%d", &M);
for(int i = ; i < M; ++i) {
scanf("%d%d", &query[i].l, &query[i].r);
query[i].id=i;
} sort(query, query+M);
int k = ;
for(int i = ; i < M; ++i) {
int j = query[i].r;
for(; k <= j; ++k) {
if(pre[a[k]])
add(pre[a[k]], -);
add(k, );
pre[a[k]] = k;
}
ans[query[i].id] = getsum(j) - getsum(query[i].l-);
}
for(int i = ; i < M; ++i)
printf("%d\n", ans[i]);
return ;
}

------------恢复内容结束------------

最新文章

  1. Win8.1 安装Express 框架
  2. IOS 使用KBMMW 访问JAVA 服务
  3. xss漏洞挖掘小结
  4. HDU 1828 / POJ 1177 Picture --线段树求矩形周长并
  5. phalcon: 过滤(Phalcon\Filter())
  6. 为设计师准备的 20 个新的免费 PSD 模板
  7. Nginx Location配置语法介绍、优先级说明
  8. CentOS用yum安装X Window
  9. 为什么虚拟机上刚装的centos7只有lo回环网络接口?
  10. php的一些基本概念梳理
  11. 技术七Gitservergitolite要构建和操作方便
  12. 打开phpmyadmin显示高级功能尚未完全设置部分功能未激活
  13. 初次接触java中的递归算法
  14. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
  15. 极化码的matlab仿真(1)——参数设置
  16. Maven合并多个war包的工程需要用到的插件
  17. 靠谱好用,ANDROID SQLITE 增删查改
  18. 在Ubuntu中部署并测试HyperLedger Fabric 0.6
  19. 如何禁止复制电脑文件到U盘、禁止U盘拷贝文件
  20. matplot绘图

热门文章

  1. linux目录与路径
  2. Linux centosVMware zabbix主动模式和被动模式、添加监控主机、添加自定义模板、处理图形中的乱码、自动发现
  3. VBS 脚本对象
  4. UIWindow的获取
  5. 学术Essay写作简单且稳定的架构解析
  6. 对C/C++指针问题的彻底理解(复习1)
  7. Centos7 VNC远程桌面服务安装配置
  8. A. Optimal Currency Exchange 兑换硬币,剩下的钱最少
  9. 2019 徐州网络赛 G Colorful String 回文树
  10. jqGrid一次性读取本地数据