正解:带修莫队

解题报告:

可以理解为引入时间参数,然后就是有了仨参数,关于这个修改同样的是,如果时间是相同的,不用搞,如果时间不相同做一下时光倒流/时光推移就成嘛

但是肯定既然这样的话,按照原来的sort的话时间参数就会改啊改改啊改依然很慢,可以到O(n2)了,还不如暴力呢

考虑怎么修改sort

可以修改成,首先依然是按照l分块,然后每个块的内部,以r所在的块为第一关键字time为第二关键字再排序

然后这个时候依然不够优秀,考虑通过修改分块的大小使其更加优秀

因为不会求时间复杂度我就放弃挣扎了QAQ

反正就通过一下很牛逼的分类讨论巴拉巴拉的可以得到当分块的大小是n2/3时时间复杂度最优秀,可以做到O(n5/3)

(不过我看了下其他大佬的博客,,,发现,,,直接用logn也可以水过去欸,,,

然后大概就没辣!

其实感觉还是没有特别难的?虽然我没看清题目范围RE了两次哭唧唧

要分析的前面都分析了唯一的问题就是关于时间复杂度的这个我也没有办法,,,等以后会计算时间复杂度了再来港趴qwq

就酱,放下代码就走了qwq

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(register ll i=x;i<=y;++i) const ll N=+,LQ=+;
ll n,m,c[LQ],cc[LQ],len,cjkl,cjkr,cjkans,num[LQ],ans[N],bl[N],now,tot;
struct qest{ll l,r,id,tim;}q[N];
struct chan{ll p,nc,oc;}cg[N]; inline ll read()
{
char ch=getchar();ll x=;bool y=;
while(ch!='-' && (ch<'' || ch>''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline bool readch()
{
char ch=getchar();
while(ch!='Q' && ch!='R')ch=getchar();
return ch=='Q';
}
inline bool cmp(qest gold,qest genius)
{return bl[gold.l]==bl[genius.l]?bl[gold.r]==bl[genius.r]?gold.tim<genius.tim:bl[gold.r]<bl[genius.r]:bl[gold.l]<bl[genius.l];}
inline ll update(ll col,ll data){num[col]+=data;if(data> && num[col]==)++cjkans;if(data< && num[col]==)--cjkans;}
inline void change(ll x,ll y){if(x>=cjkl && x<=cjkr)update(c[x],-),update(y,);c[x]=y;} int main()
{
n=read();m=read();len=pow(n,0.66666);rp(i,,n)bl[i]=((i+)/len)+;
rp(i,,n)c[i]=read(),cc[i]=c[i];
rp(i,,m)
{
bool op=readch();
if(op)q[i-tot].l=read(),q[i-tot].r=read(),q[i-tot].id=i-tot,q[i-tot].tim=tot;
else cg[++tot].p=read(),cg[tot].nc=read(),cg[tot].oc=cc[cg[tot].p],cc[cg[tot].p]=cg[tot].nc;
}
sort(q+,q++m-tot,cmp);cjkl=cjkr=q[].l;num[c[q[].l]]=;cjkans=;
rp(i,,m-tot)
{
// printf("i=%lld QAQ id=%lld tim=%lld now=%lld\n",i,q[i].id,q[i].tim,now);
while(now<q[i].tim)change(cg[now+].p,cg[now+].nc),++now;
while(now>q[i].tim)change(cg[now].p,cg[now].oc),--now;
// rp(i,1,n)printf("%lld ",c[i]);printf("\n");
while(cjkl<q[i].l)update(c[cjkl],-),++cjkl;
while(cjkl>q[i].l)update(c[cjkl-],),--cjkl;
while(cjkr<q[i].r)update(c[cjkr+],),++cjkr;
while(cjkr>q[i].r)update(c[cjkr],-),--cjkr;
ans[q[i].id]=cjkans;
}
rp(i,,m-tot)printf("%lld\n",ans[i]);
return ;
}

洛谷P1903 数颜色 [国家集训队] 莫队的更多相关文章

  1. 题解 洛谷P1903/BZOJ2120【[国家集训队]数颜色 / 维护队列】

    对于不会树套树.主席树的本蒟蒻,还是老老实实的用莫队做吧.... 其实这题跟普通莫队差不了多远,无非就是有了一个时间,当我们按正常流程排完序后,按照基本的莫队来,做莫队时每次循环对于这一次操作,我们在 ...

  2. Bzoj2120/洛谷P1903 数颜色(莫队)

    题面 Bzoj 洛谷 题解 考虑对操作离线后分块处理询问操作(莫队算法),将询问操作按照编号分块后左端点第一关键字,右端点第二关键字排序(分块大小为\(n^{\frac 23}\)),对于每一个询问操 ...

  3. [bzoj2120] [洛谷P1903] 数颜色

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

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

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

  5. COGS.1901.[模板][国家集训队2011]数颜色(带修改莫队)

    题目链接 COGS BZOJ2120 洛谷P1903 /* Add和Subd函数中的vis不能直接设为=1或=0 比如 l=1,r=0 -> l=3,r=5 时,[1,5]的vis标记全都是1 ...

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

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

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

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

  8. 【洛谷】1494:[国家集训队]小Z的袜子【莫队】

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… ...

  9. 【BZOJ 2120】【国家集训队 2011】【数颜色】(莫队)

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

随机推荐

  1. java.security.NoSuchAlgorithmException: SHA1PRNG SecureRandom not available

    好久没有使用MyEclipse10了,今天打开看了以前大学的项目,在Tomcat7中发布启动,我嚓嘞,报错: SEVERE: Exception initializing random number ...

  2. Splash 简介与安装

    Splash 说白了就是一个轻量级的浏览器,利用它,我们同样可以实现跟其他浏览器一样的操作,我们使用 Docker 来安装 Splash: [root@localhost ~]# docker run ...

  3. Git的撤销与回滚

    1,commit 之前的撤销 未添加至暂存区的撤销(add 之前) git status git checkout . 已添加至暂存区的撤销(add 之后,有或者没有commit操作都可以执行) gi ...

  4. AutoLayout深入浅出五[UITableView动态高度]

    本文转载至 http://grayluo.github.io//WeiFocusIo/autolayout/2015/02/01/autolayout5/ 我们经常会遇到UITableViewCell ...

  5. Puppet部署

    一.域名,IP规划  域名:beyond.com puppet master:puppet.sa.beyond.com 192.168.254.254 puppet client:  *.beyond ...

  6. 《转》Python学习(19)-python函数(二)-关于lambda

    转自http://www.cnblogs.com/BeginMan/p/3178103.html 一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称 ...

  7. 【Phalapi】新加Namespace (模块)

    官网地址: https://www.phalapi.net/ github 地址: https://github.com/phalapi/phalapi/tree/master-2x 1 compos ...

  8. Github for Windows 登录时报代理问题?

    Github for Windows 登录时报如下错误: 不要被它的提示信息误导了. 登录失败,跟代理半毛钱关系都没有. 是 .net framework 组件 的问题. 更新下 .net frame ...

  9. css3整理--rgba

    rgba语法: rgba(0, 0, 0,0.5); 第一个参数:R 红色(0-255) 第二个参数:G 绿色(0-255) 第三个参数:B 蓝色(0-255) 第四个参数:透明度(0-1)使用rgb ...

  10. SSH使用秘钥和别名登陆服务器

    手工配置免密码及别名登陆 第一步:生成秘钥 $ ssh-keygen -t rsa 第二步:上传公钥到目标服务器 $ ssh-copy-id -i ~/.ssh/id_rsa.pub <romt ...