[HEOI 2012] 采花
2024-08-27 20:08:47
[题目链接]
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 ; }
最新文章
- Sigmaplot 13 破解版什么地方可以下载
- 简单高效的nodejs爬虫模型
- IOS开发之控件篇UITabBarControllor第一章 - 介绍
- iOS开发中的远程推送实现(最新,支持iOS9)
- 导入flash 逐帧动画
- player/stage 学习---安装
- SAE 合并图片
- Foj1675数论
- IOSJSBRIGE商品内容模板
- cmd介面,进adb命令提示符error
- 用CSS3 做的星体
- Python第一行代码
- MTK6577+Android之Camera驱动
- TypeScript|Angular踩坑笔记
- C#设计模式之十四命令模式(Command Pattern)【行为型】
- JAVA框架 Spring 入门
- Region使用全解
- mysql日志详解
- Java各种数据库连接大全
- INFORMATION_SCHEMA数据库介绍
热门文章
- 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]CF-236B. Easy Number Challenge
- sed命令解析[转载]
- WKWebView的了解
- python学习之-- socketserver模块
- HUST 1328 String
- 学习日常笔记<;day13>;jsp加强
- Node.js+Web TWAIN,实现Web文档扫描和图像上传
- [RxJS] Use `lift` to Connect a `source` to a `subscriber` in RxJS
- 非计算机专业的伟伯是怎样拿到阿里Offer的。求职励志!!!
- C#调用国家气象局天气预报接口