bzoj 2120 数颜色 (带修莫队)
题目链接:
https://www.lydsy.com/JudgeOnline/problem.php?id=2120
题意:两种操作:Q 询问区间 l - r 内颜色的种类 ,R 单点修改
思路:
带修莫队与普通莫队不同之处就是,带修莫队可以支持修改操作,我们可以再维护一维来表示操作的时间,那么离线处理询问时,我们就需要维护 l,r,t,三根指针,同时因为是三根指针
块的大小分成 n的2/3次方,其他地方和普通莫队维护是一样的,只是多维护了一维操作时间,可能看上去会绕一点。
实现代码:
#include<bits/stdc++.h>
using namespace std;
const int M = 1e4 + ; struct node{
int l,r,t,id;
node(int l=,int r=,int t=,int id=):l(l),r(r),t(t),id(id){}
}q[M]; struct node1{
int pos,now,old;
node1(int pos=,int now=,int old=):pos(pos),now(now),old(old){}
}c[M]; int n,m,block,l,r,num[M],a[M],now[M],flag[M*],ans;
//排序优先度如果l,r都在一个块中,那么优先选择t小的
bool cmp(node a,node b){
if(a.l/block != b.l/block){
if(a.r/block != b.r/block){
return a.t < b.t;
}
return a.r < b.r;
}
return a.l < b.l;
} void add(int col,int val){
flag[col] += val;
if(val > ) ans += (flag[col] == );
else if(val < ) ans -= (flag[col]==);
} void solve(int pos,int col){
if(pos >= l&&pos <= r) add(col,),add(a[pos],-);
a[pos] = col;
} int main()
{
scanf("%d%d",&n,&m);
block = (int)pow(n,2.0/3.0);
for(int i = ;i <= n;i ++){
scanf("%d",&a[i]);
now[i] = a[i]; //now[i] i点现在的颜色
}
int k = ;
int cnt = ; ans = ;
for(int i = ;i < m;i ++){
char op[];
int x,y;
scanf("%s%d%d",&op,&x,&y);
if(op[] == 'Q'){
//将询问的区间左右节点,在第k次修改之后,第cnt个询问等信息存到结构体q中
q[++cnt] = node(x,y,k,cnt);
}
else {
//将第k次修改的点的左边,要修改的颜色,这个点之前的颜色,存到结构体里
c[++k] = node1(x,y,now[x]);
now[x] = y; //x点现在的颜色变为y
}
}
sort(q+,q+cnt+,cmp);
l = ; r = ;
int tim = ;
for(int i = ;i <= cnt;i ++){
while(tim < q[i].t) solve(c[tim+].pos,c[tim+].now),tim++;
while(tim > q[i].t) solve(c[tim].pos,c[tim].old),tim--;
while(q[i].l < l) add(a[l-],),l--;
while(q[i].l > l) add(a[l],-),l++;
while(q[i].r < r) add(a[r],-),r--;
while(q[i].r > r) add(a[r+],),r++;
num[q[i].id] = ans;
}
for(int i = ;i <= cnt;i ++)
printf("%d\n",num[i]);
return ;
}
bzoj 2120 数颜色 (带修莫队)的更多相关文章
- BZOJ 2120 数颜色 (带修莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6367 Solved: 2537[Submit][Status][Discuss] ...
- bzoj 2120 数颜色 带修改莫队
带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...
- bzoj2120 数颜色——带修莫队
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 带修改的莫队: 用结构体存下修改和询问,排好序保证时间后就全局移动修改即可: 参考了T ...
- 【bzoj2120】数颜色 带修莫队
数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画 ...
- bzoj2120: 数颜色 带修莫队
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P ...
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- NOI模拟 颜色 - 带修莫队/树套树
题意: 一个颜色序列,\(a_1, a_2, ...a_i\)表示第i个的颜色,给出每种颜色的美丽度\(w_i\),定义一段颜色的美丽值为该段颜色的美丽值之和(重复的只计算一次),每次都会修改某个位置 ...
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...
- BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树
https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...
随机推荐
- 推荐几本对于Python初学者比较好的书籍(内含PDF)
我们提供一个初学者最好的Python书籍列表.Python是一个初级程序员可以学习编程的最友好语言之一.为了帮助您开始使用Python编程,我们分享此列表.泡一杯茶,选一本书阅读,开始使用Python ...
- Linux系列教程(七)——Linux常用命令之帮助和用户管理命令
上篇博客我们介绍了Linux文件搜索命令,其中find是用的最多的也是功能最强大的文件或目录搜索命令,和另一个搜索命令locate的区别是,find命令是全盘搜索,刚创建的文件也能搜索的到,而loca ...
- WPF中的Bitmap与byte
原文:WPF中的Bitmap与byte public MainWindow() { InitializeComponent(); byte[] b = GetPictureData(@"F: ...
- 阿里云ubuntu 16.04搭建odoo11服务器
ubuntu 16.04 具体如何搭建odoo11网站的具体步骤可以参考这一篇文章 按上面的文章配置环境后,自己网站的启动具体步骤如下: 1.登录阿里云 [远程连接],进入命令行界面1 2.cd到目录 ...
- Spring Boot(十八):使用 Spring Boot 集成 FastDFS
上篇文章介绍了如何使用 Spring Boot 上传文件,这篇文章我们介绍如何使用 Spring Boot 将文件上传到分布式文件系统 FastDFS 中. 这个项目会在上一个项目的基础上进行构建. ...
- item 3: 理解decltype
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 decltype是一个奇怪的东西.给出一个名字或者一个表达式,de ...
- jenkins 构建后发送钉钉消息通知(插件)
钉钉,越来越多的公司采用,那么我们在持续集成中,也可以直接选择钉钉插件的,在之前的博客中 ,对发送的钉钉消息进行了定制,那样的话会开启一个新的任务, 其实今天呢,我们可以直接安装一个插件就可以发送了, ...
- NTP系统时间同步-操作记录
在初始化一台linux服务器后,发现这台服务器的时间不对[root@dev ~]# date2016年 10月 11日 星期二 07:04:34 CST Linux时钟分为系统时钟 (System C ...
- mysql操作命令梳理(1)-索引
1.创建索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引.以下命令语句分别展示了如何创建主键索引(PRIMARY KE ...
- poj3126 Prime Path(c语言)
Prime Path Description The ministers of the cabinet were quite upset by the message from the Chief ...