BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】
题意:
询问区间中不同颜色的个数,单点修改颜色
发现以前写的学习笔记没法看,于是重写一下(不就是会用latex了嘛)
额外维护一个当前修改操作执行到的时间
如果要进行某个查询操作,修改操作的时间必须移动到这个查询操作处
按照$(pos[l], pos[r], tim)$排序
令$S=N^{\frac{2}{3}}$, 有$N^{\frac{1}{3}}$块,假设$N,Q$同阶
$l$移动$N*N^{\frac{2}{3}}$次 因为每次移动无论块内还是块间都是最多$N^{\frac{2}{3}}$
$r$移动$N*N^{\frac{2}{3}}$次 和$l$一样,只不过$l$块间移动时$r$也会移动,貌似这一步的复杂度是$O(N)$
$cur$移动$N*N^{\frac{1}{3}}*N^{\frac{1}{3}}$次,$l,r$共有$N^{\frac{2}{3}}$种不同的可能,每种$cur$最坏移动$O(N)$
注意排序一定排对了啊啊啊啊
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1e4+, M=1e6+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n,Q,a[N],pos[N],m,block,t[N],x,y;
char op[];
struct meow{
int l,r,tim,id;
bool operator <(const meow &a) const{
return pos[l]==pos[a.l] ? ( pos[r]==pos[a.r] ? tim<a.tim : pos[r]<pos[a.r]) : pos[l]<pos[a.l];
}
}q[N];
struct cmeow{int p,v,last;}cq[N];
int p,tim, ans[N];
int c[M], now;
int l=,r=,cur=;
inline void add(int x) {now+= (++c[x])==;}
inline void del(int x) {now-= (--c[x])==;}
inline void cha(int p,int v){
if(l<=p && p<=r) add(v), del(a[p]);
a[p]=v;
}
void modui(){
for(int i=;i<=p;i++){
while(cur<q[i].tim) cur++, cha(cq[cur].p, cq[cur].v);
while(cur>q[i].tim) cha(cq[cur].p, cq[cur].last), cur--;
while(r<q[i].r) r++, add(a[r]);
while(r>q[i].r) del(a[r]), r--;
while(l<q[i].l) del(a[l]), l++;
while(l>q[i].l) l--, add(a[l]);
ans[ q[i].id ]=now;
}
}
int main(){
//freopen("in","r",stdin);
n=read(); Q=read();
block=sqrt(n); m=(n-)/block+;
for(int i=;i<=n;i++) a[i]=t[i]=read(), pos[i]=(i-)/block+;
for(int i=;i<=Q;i++){
scanf("%s",op); x=read(); y=read();
if(op[]=='Q') q[++p]=(meow){x, y, tim, p};
else cq[++tim]=(cmeow){x, y, t[x]}, t[x]=y;
}
sort(q+, q++p);
modui();
for(int i=;i<=p;i++) printf("%d\n",ans[i]);
}
BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】的更多相关文章
- Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 2645 Solved: 1039[Submit][Status][Discuss] ...
- P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队
\(\color{#0066ff}{ 题目描述 }\) 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支 ...
- 【BZOJ】2120: 数颜色 带修改的莫队算法
[题意]给定n个数字,m次操作,每次询问区间不同数字的个数,或修改某个位置的数字.n,m<=10^4,ai<=10^6. [算法]带修改的莫队算法 [题解]对于询问(x,y,t),其中t是 ...
- BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树
https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...
- BZOJ2120 数颜色(带修改的莫队算法)
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- 【bzoj4129】Haruna’s Breakfast 带修改树上莫队+分块
题目描述 给出一棵树,点有点权.支持两种操作:修改一个点的点权,查询链上mex. 输入 第一行包括两个整数n,m,代表树上的结点数(标号为1~n)和操作数.第二行包括n个整数a1...an,代表每个结 ...
- UOJ 58 (树上带修改的莫队)
UOJ 58 糖果公园 Problem : 给一棵n个点的树,每个点上有一种颜色,对于一条路径上的点,若 i 颜色第 j 次出现对该路径权值的贡献为 w[i] * c[j], 每次询问一条路径的权值, ...
- codeforces 940F 带修改的莫队
F. Machine Learning time limit per test 4 seconds memory limit per test 512 megabytes input standard ...
- 【bzoj3052】[wc2013]糖果公园 带修改树上莫队
题目描述 给出一棵n个点的树,每个点有一个点权,点权范围为1~m.支持两种操作:(1)修改一个点的点权 (2)对于一条路径,求$\sum\limits_{i=1}^m\sum\limits_{j=1} ...
随机推荐
- EC笔记:第二部分:11:在operator=中处理“自我赋值”
已经一年半没有写过博客了,最近发现学过的知识还是需要整理一下,为知笔记,要开始收费了以前写在为知笔记上笔记也会慢慢的转到博客里. 话不多说,进入正题. 考虑考虑以下场景: 当某个对象对自身赋值时,会出 ...
- EC笔记,第一部分:4.确定对象初始化
04.确定对象初始化 将对象初始化,C++反复无常,所以在使用前应该手动初始化 1.分清赋值与初始化 以下例子: class test{ public: int a; test(){ a=0;//赋值 ...
- S1的小成果:MyKTV系统
转眼之间,已经到了2016年,即新的一年了!S1也结束了,收获的也不多 ,想想最后留给大家的就一个KTV项目了. 希望大家看时有所收获 现在我们一起来看KTV前台管理 主界面的运行 ...
- [转载]T-SQL(Oracle)语句查询执行顺序
原文链接:http://blog.sina.com.cn/s/blog_61c006ea0100mlgq.html sql语法的分析是从右到左,where子句中的条件书写顺序,基本上对sql性能没有影 ...
- 利用layer的mask属性实现逐渐揭示的动画效果
github上又看到个不错的动画(https://github.com/rounak/RJImageLoader),如图: 所以就想来自己实现以下 不试不知道,这个动画还真不是看上去那么简单,我自己想 ...
- iOS Class 使用NSProxy和NSObject设计代理类的差异
经常发现在一些需要使用消息转发而创建代理类时, 不同的程序员都有着不同的使用方法, 有些采用继承于NSObject, 而有一些采用继承自NSProxy. 二者都是Foundation框架中的基类, 并 ...
- tableView简单的动画效果
tableView 中一些动画效果通常都是实现willDisplayCell的方法来展示出一些动画的效果 (1).带有3D效果的小型动态展示 -(void)tableView:(UITableView ...
- 在 CentOS7 上安装 MongoDB
在 CentOS7 上安装 MongoDB 1 通过 SecureCRT 连接至 CentOS7 服务器: 2 进入到 /usr/local/ 目录: cd /usr/local 3 在当前目录下创建 ...
- PacificA中的租约与失效检测解读
PacificA是微软的在基于log的分布式存储系统中的复制技术. 由于配置管理器维护着当前配置的真实情况,因此主节点不必保持不变. 这是因为配置的本地视图在不同服务器上是不必同步的. 特别是,我们必 ...
- ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析
在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get).当前模式读(DB Block Gets)等诸多概念,如果 ...