●洛谷P1903 [国家集训队]数颜色
题链:
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 [国家集训队]数颜色的更多相关文章
- 洛谷 P1903 [国家集训队]数颜色 解题报告
P1903 [国家集训队]数颜色 题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1.Q L R代表询问你从第\(L\) ...
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- 洛谷 P1903 [国家集训队]数颜色 / 维护队列
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. \(Q\) \(L\) \(R\) 代表询问你从第L支画笔到第R支画笔中共有几种不同 ...
- [洛谷P1903][国家集训队]数颜色
题目大意:有$n$支画笔,有两个操作 $Q\;l\;r:$询问$[l,r]$中有几种颜色 $R\;p\;Col:$把第$p$支画笔的颜色改成$Col$ 题解:带修莫队,分为$n^{\frac{1}{3 ...
- 洛谷P1903 [国家集训队]数颜色 / 维护队列 ( 带 修 )
题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...
- 洛谷 P1903 [国家集训队]数颜色 / 维护队列 带修莫队
题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: \(1\). \(Q\) \(L\) \(R\)代表询问你从第\(L\) ...
- 洛谷 P1903 [国家集训队]数颜色
题意简述 给定一个数列,支持两个操作 1.询问l~r有多少不同数字 2.修改某个数字 题解思路 带修莫队 如果修改多了,撤销修改 如果修改少了,进行修改 代码 #include <cmath&g ...
- bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
- P1903 [国家集训队]数颜色 / 维护队列(莫队区间询问+单点修改)
题目链接:https://www.luogu.org/problemnew/show/P1903 题目大意:中文题目 具体思路:莫队单点修改+区间询问模板题,在原来的区间询问的基础上,我们要记录当前这 ...
随机推荐
- 2017-2018-1 Java演绎法 第四五周 作业
团队任务:撰写<需求规格说明书> 团队组长:袁逸灏 本次编辑:刘伟康 流程.分工.比例 (比例按照任务的费时.难度和完成情况估算) 流程 确定任务 -→ 分配任务 -→ 各组员完成各自任务 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- 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的时候,遇到这个问题,百度之后,看到大家的解决方案 ...
- AWS中的Internet 网关
nternet 网关是一种横向扩展.支持冗余且高度可用的 VPC 组件,可实现 VPC 中的实例与 Internet 之间的通信.因此它不会对网络流量造成可用性风险或带宽限制. Internet 网关 ...
- python 一篇搞定所有的异常处理
一:什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在python无法正常处理程序时就会发生一个异常(异常是python对象,表示一个错误) 异常就是 ...
- php的借用其他网站的页面覆盖Logo的技巧
php的借用其他网站的页面覆盖Logo的技巧, <body> <div id="red_f"></div> <div class=&quo ...
- wamp的mysql设置用户名和密码
wamp下修改mysql root用户的登录密码 感谢作者:http://www.3lian.com/edu/2014/02-25/131010.html 1.安装好wam ...
- Python内置函数(29)——slice
英文文档: class slice(stop) class slice(start, stop[, step]) Return a slice object representing the set ...
- Mysql数据库mys和ora库的备份与恢复脚本
!/bin/bash Time=$(date +%Y%md%H%M%S) Back_dir="$HOME/mysqlback/${Time}" function Detect_u_ ...
- mongodb聚合的使用
聚合: 主要用于计算和统计等,类似sql种的sum() avg() db.集合.aggregate( { 管道:{表达式} } ) 常用的管道: $group:将集合中的文档按照字段进行分组 $mat ...