[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=2743

[算法]

首先预处理nxt[]数组 , 其中 , nxt[i]表示下一个和i号位颜色相同的位置 , 然后离线 , 将询问按左端点排序 , 每次将nxt[i]减一 , nxt[nxt[i]]加一

用树状数组维护即可 , 详见代码

时间复杂度 : O(MlogN)

[代码]

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + ; struct Que
{
int l , r , id;
} q[MAXN]; int n , c , m;
int a[MAXN] , ans[MAXN] , pre[MAXN] , nxt[MAXN];
bool visited[MAXN]; struct Binary_Indexed_Tree
{
int c[MAXN];
inline int lowbit(int x)
{
return x & (-x);
}
inline void add(int pos,int value)
{
if (!pos) return;
for (int i = pos; i <= n; i += lowbit(i))
c[i] += value;
}
inline int query(int pos)
{
int ret = ;
if (!pos) return ;
for (int i = pos; i; i -= lowbit(i))
ret += c[i];
return ret;
}
inline int query(int l,int r)
{
return query(r) - query(l - );
}
} bit; template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline bool cmp(Que a,Que b)
{
return a.l < b.l;
} int main()
{ read(n); read(c); read(m);
for (int i = ; i <= n; i++) read(a[i]);
for (int i = n; i >= ; i--)
{
if (!visited[a[i]])
{
visited[a[i]] = true;
pre[a[i]] = i;
continue;
} else
{
nxt[i] = pre[a[i]];
pre[a[i]] = i;
}
}
memset(visited,false,sizeof(visited));
for (int i = ; i <= n; i++)
{
if (!visited[a[i]])
{
bit.add(nxt[i],);
visited[a[i]] = true;
}
}
for (int i = ; i <= m; i++)
{
read(q[i].l); read(q[i].r);
q[i].id = i;
}
sort(q + ,q + m + ,cmp);
int cur = ;
for (int i = ; i <= m; i++)
{
while (cur < q[i].l)
{
bit.add(nxt[cur],-);
bit.add(nxt[nxt[cur]],);
++cur;
}
ans[q[i].id] = bit.query(q[i].r) - bit.query(q[i].l - );
}
for (int i = ; i <= m; i++) printf("%d\n",ans[i]); return ; }

最新文章

  1. Sigmaplot 13 破解版什么地方可以下载
  2. 简单高效的nodejs爬虫模型
  3. IOS开发之控件篇UITabBarControllor第一章 - 介绍
  4. iOS开发中的远程推送实现(最新,支持iOS9)
  5. 导入flash 逐帧动画
  6. player/stage 学习---安装
  7. SAE 合并图片
  8. Foj1675数论
  9. IOSJSBRIGE商品内容模板
  10. cmd介面,进adb命令提示符error
  11. 用CSS3 做的星体
  12. Python第一行代码
  13. MTK6577+Android之Camera驱动
  14. TypeScript|Angular踩坑笔记
  15. C#设计模式之十四命令模式(Command Pattern)【行为型】
  16. JAVA框架 Spring 入门
  17. Region使用全解
  18. mysql日志详解
  19. Java各种数据库连接大全
  20. INFORMATION_SCHEMA数据库介绍

热门文章

  1. 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]CF-236B. Easy Number Challenge
  2. sed命令解析[转载]
  3. WKWebView的了解
  4. python学习之-- socketserver模块
  5. HUST 1328 String
  6. 学习日常笔记&lt;day13&gt;jsp加强
  7. Node.js+Web TWAIN,实现Web文档扫描和图像上传
  8. [RxJS] Use `lift` to Connect a `source` to a `subscriber` in RxJS
  9. 非计算机专业的伟伯是怎样拿到阿里Offer的。求职励志!!!
  10. C#调用国家气象局天气预报接口