题意:

询问区间中不同颜色的个数,单点修改颜色


发现以前写的学习笔记没法看,于是重写一下(不就是会用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 维护队列 [带修改的莫队算法]【学习笔记】的更多相关文章

  1. Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 2645  Solved: 1039[Submit][Status][Discuss] ...

  2. P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队

    \(\color{#0066ff}{ 题目描述 }\) 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支 ...

  3. 【BZOJ】2120: 数颜色 带修改的莫队算法

    [题意]给定n个数字,m次操作,每次询问区间不同数字的个数,或修改某个位置的数字.n,m<=10^4,ai<=10^6. [算法]带修改的莫队算法 [题解]对于询问(x,y,t),其中t是 ...

  4. BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...

  5. BZOJ2120 数颜色(带修改的莫队算法)

    Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...

  6. 【bzoj4129】Haruna’s Breakfast 带修改树上莫队+分块

    题目描述 给出一棵树,点有点权.支持两种操作:修改一个点的点权,查询链上mex. 输入 第一行包括两个整数n,m,代表树上的结点数(标号为1~n)和操作数.第二行包括n个整数a1...an,代表每个结 ...

  7. UOJ 58 (树上带修改的莫队)

    UOJ 58 糖果公园 Problem : 给一棵n个点的树,每个点上有一种颜色,对于一条路径上的点,若 i 颜色第 j 次出现对该路径权值的贡献为 w[i] * c[j], 每次询问一条路径的权值, ...

  8. codeforces 940F 带修改的莫队

    F. Machine Learning time limit per test 4 seconds memory limit per test 512 megabytes input standard ...

  9. 【bzoj3052】[wc2013]糖果公园 带修改树上莫队

    题目描述 给出一棵n个点的树,每个点有一个点权,点权范围为1~m.支持两种操作:(1)修改一个点的点权 (2)对于一条路径,求$\sum\limits_{i=1}^m\sum\limits_{j=1} ...

随机推荐

  1. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  2. ObjectStream 及 序列化 介绍

    ObjectInputStream 和 ObjectOutputStream 介绍 ObjectInputStream 和 ObjectOutputStream 的作用是,对基本数据和对象进行序列化操 ...

  3. CSS学习

    标签选择器,标签名{},作用于所有此标签. 类选择器, .class{},在标签内定义class="",属图形结构. ID选择器,#ID{}, 在标签内定义id="&qu ...

  4. #8.31课堂总结#JS基础

    一.Javascript能做些什么? 表单数据合法性验证 网页特效:使用DOM和CSS可以实现网页特效 交互式菜单:创作具有动态效果的交互式菜单,完全能够与flash制作的导航菜单相媲美 动态页面:使 ...

  5. SharePoint 2013 图文开发系列之定义站点模板

    SharePoint站点模板是一个非常好的功能,方便我们开发一类网站,然后在此基础上做二次开发,对于SharePoint的使用,有着举足轻重的作用. 因为篇幅比较长,所以加上目录,方便大家查看: 一. ...

  6. Thread多线程(一)

    网上关于多线程的讲解有很多,意义也不用过多介绍,相信聪明的你早已知道,下面我们在剖析一下JAVA中的多线程的一些方法. 在JAVA中分别提供了两种方式实现多线程,分别继承Java.lang.Threa ...

  7. fillStyle径向渐变

    <!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>canvas</ ...

  8. 在数组中找出x+y+z=0的组合

    就是找x+y=-z的组合 转化为找出值为-z满足x+y=-z的组合 解法一: 为了查找,首先想到排序,为了后面的二分,nlogn, 然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlo ...

  9. 下一代Asp.net开发规范OWIN(1)—— OWIN产生的背景以及简单介绍

    随着VS2013的发布,微软在Asp.Net中引入了很多新的特性,比如使用新的权限验证模块Identity, 使用Async来提高Web服务器的吞吐量和效率等.其中一个不得不提的是OWIN和Katan ...

  10. SSIS 2010 BUG 一例

    Sample data :abc|"edfg|xyz Test 1: Text Qualified is  set to nothing. the result is in good for ...