https://www.luogu.org/problemnew/show/P1903

之前切过这道题,复习莫队再切一遍,不过我之前写的是主席树和树状数组,也不知道我当时怎么想的……

这个题卡常我没写快读只有开O2才能过,找这道题题解的时候发现了typedef这个东西,据说比define好用就写上了,虽然到最后也没用上……

总复杂度O( n^ ( 5/ 3) )

这个块的大小是n^ ( 2/ 3) ,我也不知道为什么,好像根据数据范围可以改的。

#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
const int maxn = 50010;
int n,m,sqr,totc=0,totq=0;
int pos[maxn]={},las[maxn]={},ans[maxn]={},cnt[1000010]={},col[maxn]={};
char ch[2];
struct C{int x,v,la;}c[maxn];
struct Q{int l,r,k,id;}q[maxn];
inline bool cmd(Q a, Q b){
if(a.l==b.l){
if(a.r==b.r)return a.k<b.k;
return a.r<b.r;
}
return a.l<b.l;
}
int main(){
scanf("%d%d",&n,&m);sqr=pow((double)n,2.0/3.0);
for(int i=1;i<=n;++i){scanf("%d",&col[i]);las[i]=col[i];}
for(int i=1;i<=n;++i)pos[i]=(i-1)/sqr+1;
for(int i=1;i<=m;++i){
int x,y;scanf("%s%d%d",ch,&x,&y);
if(ch[0]=='Q'){ q[++totq].l = x; q[totq].r = y; q[totq].id = totq; q[totq].k = totc; }
else{ c[++totc].x = x; c[totc].v = y; c[totc].la = las[x]; las[x] = y; }
}
sort(q+1,q+totq+1,cmd);
int tk=0,tl=1,tr=0,tnow=0;
for(int i=1;i<=totq;++i){
while(tk<q[i].k){
++tk;
if(tl<=c[tk].x&&c[tk].x<=tr){
--cnt[c[tk].la];++cnt[c[tk].v];
if(cnt[c[tk].la]==0)--tnow;
if(cnt[c[tk].v]==1)++tnow;
}
col[c[tk].x]=c[tk].v;
}
while(tk>q[i].k){
if(tl<=c[tk].x&&c[tk].x<=tr){
++cnt[c[tk].la];--cnt[c[tk].v];
if(cnt[c[tk].la]==1)++tnow;
if(cnt[c[tk].v]==0)--tnow;
}
col[c[tk].x]=c[tk].la;
--tk;
}
while(tl<q[i].l){if(cnt[col[tl]]==1)--tnow;--cnt[col[tl]];++tl;}
while(tl>q[i].l){--tl;++cnt[col[tl]];if(cnt[col[tl]]==1)++tnow;}
while(tr<q[i].r){++tr;++cnt[col[tr]];if(cnt[col[tr]]==1)++tnow;}
while(tr>q[i].r){if(cnt[col[tr]]==1)--tnow;--cnt[col[tr]];--tr;}
ans[q[i].id]=tnow;
}
for(int i=1;i<=totq;++i)printf("%d\n",ans[i]);
return 0;
}

  

Luogu P1903 BZOJ 2120 数颜色 带修改的莫队的更多相关文章

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

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

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

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

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

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

  4. bzoj 2120 数颜色 带修改莫队

    带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...

  5. P1903 [国家集训队]数颜色 (带修改莫队)

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

  6. BZOJ 2120 数颜色 (带修莫队)

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

  7. BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]

    BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...

  8. bzoj 2120 数颜色 (带修莫队)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间  l - r  内颜色的种类 ,R 单点修改 思路 ...

  9. P1903 [国家集训队]数颜色 带修改莫队板子

    大概就是要多加一维time 然后按照(l的块,r的块,time)为关键字排序 转移区间修改还是按照莫队的方式(每个修改要记修改前后的状态) 然后玄学dalao告诉窝块大小设为\(O(n^{\frac{ ...

随机推荐

  1. yield再理解--绝对够透彻

    首先,拿好宝剑: 先把yield看做“return”, 普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了. 看做return之后再把它看做一个是生成器(generat ...

  2. UnityShader - 渲染管线

    定义: 显卡内部处理图像信号的并行处理单元,也称为渲染流水线 发生位置: CPU和GPU 渲染机理: 将图像所具备的图形信息(顶点.纹理.材质.摄像机位置等)经过一系列阶段的处理,最终转换为屏幕上的图 ...

  3. 自定义 Generate POJOs.groovy

    一.Generate文件 import com.intellij.database.model.DasTable import com.intellij.database.model.ObjectKi ...

  4. 流程activiti的组和用户的使用

    一.数据表增加用户和分组 1.建立用户 2.建立组 3.建立用户和组的关联关系 二.新建测试流程 1.流程整体 2.设置“部门经理”任务的属性,填写组的ID 3.设置“总经理”任务的属性,填写组的ID ...

  5. Asp.Net进阶/值类型与引用类型:复习

    什么是值类型? 值类型: 就是非类类型,委托类型,接口类型,string类型的类型称为值类型. 引用类型类型:就是类类型,委托类型,接口类型,string类型称为引用类型. 值类型与引用类型的赋值问题 ...

  6. C# vb .net实现灰度化特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的灰度化呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步: ...

  7. sql语句将图片插入image类型的字段中

    update table set photo=(SELECT * FROM OPENROWSET(BULK N'D:\no.png', SINGLE_BLOB) as Photo)    From:h ...

  8. OpenJML入门

    目录 OpenJML 获取 下载 使用 Linux Windows Parsing and Type-checking Extended Static Checking Runtime Asserti ...

  9. MMU与cache

    这一快理解的非常浅: MMU 虚拟存储器对内存进行了逻辑上的扩充.比如一个32位的CPU系统,逻辑上的寻址可以达到4GB,但是如果直接对物理地址进行寻址,就要受到主存大小的限制. 在这种条件下,虚拟地 ...

  10. union 和 union all的区别

    union 和 union all的区别 相同点和不同点 相同点:union和union all 都是对于多个查询结果的并集进行操作不同点:1.union 不会输出两个结果并集的重复行2.union ...