分析:

听说是莫队裸题,很显然,我并不喜欢莫队。

我们可以考虑将询问离线,以右端点排序,之后从1枚举到n,依次树状数组中修改i和last[i],之后当i==询问的右节点时,find一下答案就可以了。

附上代码:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
using namespace std;
#define N 50005
#define M 1000005
int n,m,a[N],last[M];
struct node
{
int l,r,ans,idx;
}q[N<<2];
bool cmp(const node &c,const node &b){return c.r<b.r;}
bool cmp1(const node &a,const node &b){return a.idx<b.idx;}
int sum[N];
void fix(int x,int c){for(int i=x;i<=n;i+=i&-i)sum[i]+=c;}
int find(int x)
{
int ret=0;
for(int i=x;i;i-=i&-i)ret+=sum[i];
return ret;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=1;i<=m;i++)scanf("%d%d",&q[i].l,&q[i].r),q[i].idx=i;
sort(q+1,q+m+1,cmp);
int cnt=1;
for(int i=1;i<=n;i++)
{
if(last[a[i]])fix(last[a[i]],-1);
fix(i,1);
last[a[i]]=i;
while(q[cnt].r==i)q[cnt].ans=find(i)-find(q[cnt].l-1),cnt++;
}
sort(q+1,q+m+1,cmp1);
for(int i=1;i<=m;i++)
{
printf("%d\n",q[i].ans);
}
return 0;
}

  

最新文章

  1. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
  2. json与JavaScript对象互换
  3. width:100%;与width:auto;的区别
  4. Spring任务调度之Quartz
  5. 用js计算从开始到结束时间之内的按周值选定
  6. 关于使用Transaction对于非数据库事务的操作
  7. 1.6.6 De-Duplication(重复数据删除)
  8. 运行yum报错Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
  9. [iOS基础控件 - 6.10.4] 项目启动原理 项目中的文件
  10. linuxC编程实战 my_server.c例子问题总结
  11. autorelease方法
  12. 【20171027中】alert(1) to win 第13,14,15,16题
  13. 二十一、Hadoop学记笔记————kafka的初识
  14. VRS——备忘
  15. HDU 2036 叉乘求三角形面积
  16. Windows下OpenCV 3.1.0 在 Qt Creator 4.0.2 (Qt 5.7.0 MinGW) 中的开发环境配置
  17. C++继承-重载-多态-虚函数
  18. jdk1.5后枚举类的定义规则
  19. 使用open live writee写的博客
  20. selenium学习笔记(智能等待)

热门文章

  1. 接口自动化&#160;基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
  2. 2018-10-18 22:15:32 c language
  3. 网站软件FTP下载
  4. android dev概念快速入门
  5. quarz时间配置
  6. python Anaconda
  7. 怎么查看自己电脑的IP地址
  8. PyCharm导入模块报No model named
  9. 阿里云 IOT 对接设备开发 C# 开发设备对接阿里云 IOT平台
  10. 服务器安装安装Office2007以上版本注意事项