题链:

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

序列带修莫队,

推荐博客https://www.cnblogs.com/Paul-Guderian/p/6933799.html

复杂度$O(N^{\frac{5}{3}})$
代码:

include<bits/stdc++.h>
#define MAXN 10005
using namespace std;
int N,M,BLOCK,ans;
int color[1000006],s[MAXN],bel[MAXN],ANS[MAXN];
struct Query{
int l,r,t,id;
bool operator < (const Query &rtm) const{
return bel[l]==bel[rtm.l]?(bel[r]==bel[rtm.r]?t<rtm.r:bel[r]<bel[rtm.r]):bel[l]<bel[rtm.l];
}
}Q[MAXN];
struct Change{int p,newval,oldval;}C[MAXN];
int L=1,R,T;
void modify(int p,int k){
color[s[p]]+=k;
if(color[s[p]]==0&&k==-1) ans--;
if(color[s[p]]==1&&k==1) ans++;
}
void dotime(int p,int v){
if(L<=p&&p<=R) modify(p,-1),s[p]=v,modify(p,1);
else s[p]=v;
}
int main(){
static int now[MAXN];
char ch; int x,y,qnt=0,tim=0;
scanf("%d%d",&N,&M); BLOCK=pow(N,2.0/3);
for(int i=1;i<=N;i++) bel[i]=i/BLOCK;
for(int i=1;i<=N;i++) scanf("%d",&s[i]),now[i]=s[i];
for(int i=1;i<=M;i++){
scanf(" %c%d%d",&ch,&x,&y);
if(ch=='Q') qnt++,Q[qnt]=(Query){x,y,tim,qnt};
else tim++,C[tim]=(Change){x,y,now[x]},now[x]=y;
}
sort(Q+1,Q+qnt+1);
for(int i=1;i<=qnt;i++){
while(T<Q[i].t) T++,dotime(C[T].p,C[T].newval);
while(T>Q[i].t) dotime(C[T].p,C[T].oldval),T--;
while(R<Q[i].r) R++,modify(R,1);
while(R>Q[i].r) modify(R,-1),R--;
while(L<Q[i].l) modify(L,-1),L++;
while(L>Q[i].l) L--,modify(L,1);
ANS[Q[i].id]=ans;
}
for(int i=1;i<=qnt;i++) printf("%d\n",ANS[i]);
return 0;
}

  

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

  1. 洛谷 P1903 [国家集训队]数颜色 解题报告

    P1903 [国家集训队]数颜色 题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1.Q L R代表询问你从第\(L\) ...

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

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

  3. 洛谷 P1903 [国家集训队]数颜色 / 维护队列

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

  4. [洛谷P1903][国家集训队]数颜色

    题目大意:有$n$支画笔,有两个操作 $Q\;l\;r:$询问$[l,r]$中有几种颜色 $R\;p\;Col:$把第$p$支画笔的颜色改成$Col$ 题解:带修莫队,分为$n^{\frac{1}{3 ...

  5. 洛谷P1903 [国家集训队]数颜色 / 维护队列 ( 带 修 )

    题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...

  6. 洛谷 P1903 [国家集训队]数颜色 / 维护队列 带修莫队

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

  7. 洛谷 P1903 [国家集训队]数颜色

    题意简述 给定一个数列,支持两个操作 1.询问l~r有多少不同数字 2.修改某个数字 题解思路 带修莫队 如果修改多了,撤销修改 如果修改少了,进行修改 代码 #include <cmath&g ...

  8. bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)

    P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...

  9. P1903 [国家集训队]数颜色 / 维护队列(莫队区间询问+单点修改)

    题目链接:https://www.luogu.org/problemnew/show/P1903 题目大意:中文题目 具体思路:莫队单点修改+区间询问模板题,在原来的区间询问的基础上,我们要记录当前这 ...

随机推荐

  1. 2017-2018-1 Java演绎法 第四五周 作业

    团队任务:撰写<需求规格说明书> 团队组长:袁逸灏 本次编辑:刘伟康 流程.分工.比例 (比例按照任务的费时.难度和完成情况估算) 流程 确定任务 -→ 分配任务 -→ 各组员完成各自任务 ...

  2. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

  3. Exception in thread "main" expected '<document start>', but found BlockMappingStart in 'reader', line 23, column 2: nimbus.host: "master"

    平台:centos-6.3-i386 jdk-7u51 storm 0.9.1 python 2.6.6   hadoop 1.2.1 启动storm的时候,遇到这个问题,百度之后,看到大家的解决方案 ...

  4. AWS中的Internet 网关

    nternet 网关是一种横向扩展.支持冗余且高度可用的 VPC 组件,可实现 VPC 中的实例与 Internet 之间的通信.因此它不会对网络流量造成可用性风险或带宽限制. Internet 网关 ...

  5. python 一篇搞定所有的异常处理

    一:什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在python无法正常处理程序时就会发生一个异常(异常是python对象,表示一个错误) 异常就是 ...

  6. php的借用其他网站的页面覆盖Logo的技巧

    php的借用其他网站的页面覆盖Logo的技巧, <body> <div id="red_f"></div> <div class=&quo ...

  7. wamp的mysql设置用户名和密码

    wamp下修改mysql root用户的登录密码 感谢作者:http://www.3lian.com/edu/2014/02-25/131010.html               1.安装好wam ...

  8. Python内置函数(29)——slice

    英文文档: class slice(stop) class slice(start, stop[, step]) Return a slice object representing the set ...

  9. Mysql数据库mys和ora库的备份与恢复脚本

    !/bin/bash Time=$(date +%Y%md%H%M%S) Back_dir="$HOME/mysqlback/${Time}" function Detect_u_ ...

  10. mongodb聚合的使用

    聚合: 主要用于计算和统计等,类似sql种的sum() avg() db.集合.aggregate( { 管道:{表达式} } ) 常用的管道: $group:将集合中的文档按照字段进行分组 $mat ...