bzoj 2120 数颜色 带修改莫队
带修改莫队,每次查询前调整修改
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 20005
using namespace std;
int n,m,nn,a[N],be[N],l,r,num[1000005],tot,qq,cc;
bool vis[N];
struct Change{
int pos,nxt,pre;
}ch[1005];
struct Query{
int l,r,tim,id,ans;
}qr[10005];
bool cmp1(Query a,Query b){
if(be[a.l]==be[b.l]) return a.r<b.r;
return be[a.l]<be[b.l];
}
bool cmp2(Query a,Query b){
return a.id<b.id;
}
void change(int pos,int now){
if(pos>=l&&pos<=r){
if(!(--num[a[pos]]))
tot--;
if(++num[now]==1)
tot++;
}
a[pos]=now;
}
void update(int pos){
if(vis[pos]){
vis[pos]=0;
if(!(--num[a[pos]]))
tot--;
return ;
}
if(!vis[pos]){
vis[pos]=1;
if(++num[a[pos]]==1)
tot++;
return ;
}
}
void work(){
l=1,r=0,tot=0;
qr[0].tim=cc;
for(int i=1;i<=qq;i++){
//printf("%d %d %d %d\n",qr[i].l,qr[i].r,qr[i].id,qr[i].tim);
for(int j=qr[i-1].tim+1;j<=qr[i].tim;j++)
change(ch[j].pos,ch[j].nxt);
for(int j=qr[i-1].tim;j>qr[i].tim;j--)
change(ch[j].pos,ch[j].pre);
while(l<qr[i].l) update(l++);
while(l>qr[i].l) update(--l);
while(r<qr[i].r) update(++r);
while(r>qr[i].r) update(r--);
qr[i].ans=tot;
}
}
int main()
{
scanf("%d%d",&n,&m); nn=(int)sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
be[i]=(i-1)/nn+1;
}
char s; int aa,bb;
for(int i=1;i<=m;i++)
{
s=getchar();
while(s!='Q'&&s!='R')s=getchar();
scanf("%d%d",&aa,&bb);
if(s=='R'){
ch[++cc].pos=aa;
ch[cc].nxt=bb;
ch[cc].pre=a[aa];
a[aa]=bb;
}
if(s=='Q'){
qr[++qq].tim=cc;
qr[qq].l=aa;
qr[qq].r=bb;
qr[qq].id=qq;
}
}
sort(qr+1,qr+qq+1,cmp1);
work();
sort(qr+1,qr+qq+1,cmp2);
for(int i=1;i<=qq;i++)
printf("%d\n",qr[i].ans);
return 0;
}
bzoj 2120 数颜色 带修改莫队的更多相关文章
- BZOJ 2120 数颜色 (带修莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6367 Solved: 2537[Submit][Status][Discuss] ...
- bzoj 2120 数颜色 (带修莫队)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间 l - r 内颜色的种类 ,R 单点修改 思路 ...
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...
- BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树
https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...
- Luogu P1903 BZOJ 2120 数颜色 带修改的莫队
https://www.luogu.org/problemnew/show/P1903 之前切过这道题,复习莫队再切一遍,不过我之前写的是主席树和树状数组,也不知道我当时怎么想的…… 这个题卡常我没写 ...
- P1903 [国家集训队]数颜色 (带修改莫队)
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- P1903 [国家集训队]数颜色 带修改莫队板子
大概就是要多加一维time 然后按照(l的块,r的块,time)为关键字排序 转移区间修改还是按照莫队的方式(每个修改要记修改前后的状态) 然后玄学dalao告诉窝块大小设为\(O(n^{\frac{ ...
- [国家集训队][bzoj2120] 数颜色 [带修改莫队]
题面: 传送门 思路: 这道题和SDOI2009的HH的项链很像,只是多了一个修改 模板套上去呀 莫队学习请戳这里:莫队 Code: #include<iostream> #include ...
随机推荐
- miniUI Grid添加汇总行,Grid绑定数据,IDEA免编译设置
坑1: 2017-6-5周二,上午解决了昨天摸索一下午的问题,使用miniui显示汇总行数据,要点有这么几个 在创建Grid div的时候一定要加上以下两个属性: //显示汇总行开关 showSumm ...
- 运行ant脚本(转载)
http://blog.csdn.net/linwei_1029/article/details/5809801 运行ANT脚本的步骤 1.右击我的电脑-->属性-->高级-->环境 ...
- linux下安装xhprof
https://jingyan.baidu.com/article/a24b33cd7ee1d519ff002b6d.html
- 分布式服务通讯框架XXL-RPC
<分布式服务通讯框架XXL-RPC> 一.简介 1.1 概述 XXL-RPC 是一个分布式服务通讯框架,提供稳定高性能的RPC远程服务调用功能.现已开放源代码,开箱即用. 1.2 特 ...
- asp.net路径问题
-------------初级篇---------------------------------------- 在一般的href中路径的引用问题 ./index.aspx与index.aspx都 ...
- django相关网站
记录django的学习笔记:http://www.cnblogs.com/qwj-sysu/tag/django/ uwsgi的文档:http://uwsgi-docs.readthedocs.io/ ...
- Django入门二之模板语法
一. 模板变量 Context传入的可以是一个str,dict,list,甚至是一个实例对象 在html中如何调用这些对象进行取值呢 1. 变量名 {{ variable }} 返回字符串,无论是st ...
- Java中的queue和deque对比详解
队列(queue)简述 队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则.Java中,LinkedList实现了Queue接口,因为LinkedLis ...
- spring-cloud-sleuth+zipkin追踪服务实现(三)
1.前言 在上一篇spring-cloud-sleuth+zipkin追踪服务实现(二)中我们讲述了利用mq的方式发送数据,存储在mysql,实际生产过程中调用数据量非常的大,mysql存储并不是很好 ...
- Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例
本文目录 1. 摘要 2. Redis配置 3. RedisHelper 4.使用实例 5. 总结 1. 摘要 由于內存存取速度远高于磁盘读取的特性,为了程序效率提高性能,通常会把常用的不常变动的数 ...