BZOJ2120:数颜色(莫队版)
浅谈莫队:https://www.cnblogs.com/AKMer/p/10374756.html
题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=2120
分块做法:https://www.cnblogs.com/AKMer/p/10373457.html
树套树做法:https://www.cnblogs.com/AKMer/p/10189008.html
裸的带修改莫队,用一个桶维护区间内元素,每次桶从\(0\)变\(1\)或者从\(1\)变\(0\)就把全局\(ans\)加一或减一即可。
时间复杂度:\(O(n^{\frac{5}{3}})\)
空间复杂度:\(O(n)\)
代码如下:
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e4+5,maxv=1e6+5;
char s[5];
int n,m,block,ans,cnt1,cnt2,nowl,nowr,t;
int a[maxn],bel[maxn],cnt[maxv],lst[maxn];
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct query {
int l,r,tim,id,res;
query() {}
query(int _l,int _r,int _tim,int _id) {
l=_l,r=_r,tim=_tim,id=_id;
}
bool operator<(const query &a)const {
if(bel[l]==bel[a.l]&&bel[r]==bel[a.r])return tim<a.tim;
if(bel[l]==bel[a.l])return bel[l]&1?bel[r]<bel[a.r]:bel[r]>bel[a.r];
return bel[l]<bel[a.l];
}
}q[maxn];
struct modify {
int pos,col,lst;
modify() {}
modify(int _pos,int _col,int _lst) {
pos=_pos,col=_col,lst=_lst;
}
}c[maxn];
bool cmp(query a,query b) {
return a.id<b.id;
}
void change(int pos,int col) {
if(pos>=nowl&&pos<=nowr) {
if(!cnt[col])ans++;
if(cnt[a[pos]]==1)ans--;
cnt[a[pos]]--,cnt[col]++;
}a[pos]=col;
}
void update(int col,int v) {
if(cnt[col]==1&&v==-1)ans--;
if(cnt[col]==0&&v==1)ans++;
cnt[col]+=v;
}
int main() {
n=read(),m=read(),block=pow(n,2.0/3);
for(int i=1;i<=n;i++)
lst[i]=a[i]=read(),bel[i]=(i-1)/block+1;
for(int i=1;i<=m;i++) {
scanf("%s",s+1);
if(s[1]=='Q') {
int l=read(),r=read();
q[++cnt1]=query(l,r,cnt2,i);
}
else {
int pos=read(),col=read();
c[++cnt2]=modify(pos,col,lst[pos]);
lst[pos]=col;
}
}
sort(q+1,q+cnt1+1);
nowl=1,nowr=0,t=0;
for(int i=1;i<=cnt1;i++) {
while(t<q[i].tim)t++,change(c[t].pos,c[t].col);
while(t>q[i].tim)change(c[t].pos,c[t].lst),t--;
while(nowl<q[i].l)update(a[nowl++],-1);
while(nowl>q[i].l)update(a[--nowl],1);
while(nowr<q[i].r)update(a[++nowr],1);
while(nowr>q[i].r)update(a[nowr--],-1);
q[i].res=ans;
}
sort(q+1,q+cnt1+1,cmp);
for(int i=1;i<=cnt1;i++)
printf("%d\n",q[i].res);
return 0;
}
BZOJ2120:数颜色(莫队版)的更多相关文章
- bzoj2120 数颜色 莫队 带修改
[bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- bzoj2120: 数颜色 [莫队][分块]
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- BZOJ2120 数颜色 莫队 带修莫队
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 ...
- [BZOJ2120]数颜色(莫队算法)
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- BZOJ2120 数颜色 【带修莫队】
BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...
- BZOJ2120 数颜色 【带修改莫队】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 6579 Solved: 2625 [Submit][Status][Discus ...
- [Bzoj2120]数颜色 (非正解 )(莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6286 Solved: 2489[Submit][Status][Discuss] ...
- BZOJ2120 数颜色(带修改莫队)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...
随机推荐
- Django ORM --- 建表、查询、删除基础
1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...
- Cgroups控制cpu,内存,io示例【转】
本文转载自:https://www.cnblogs.com/yanghuahui/p/3751826.html 百度私有PaaS云就是使用轻量的cgoups做的应用之间的隔离,以下是关于百度架构师许立 ...
- MongoDB快速入门(七)- Save() 方法
MongoDB Save() 方法 save() 方法取代,通过新文档到 save()方法 语法 mongodb 的 save()方法如下所示的基本语法: >db.COLLECTION_NAME ...
- CentOs linux安装SVN服务
SVN服务器有2种运行方式:1.独立服务器(例如:svn://xxx.com/xxx):2.借助apache (例如:http://svn.xxx.com/xxx):为了不依赖apache,我选择 ...
- 互联网高并发之Hystrix实现服务隔离和降级
当大多数人在使用Tomcat时,多个HTTP服务会共享一个线程池,假设其中一个HTTP服务访问的数据库响应非常慢,这将造成服务响应时间延迟增加,大多数线程阻塞等待数据响应返回,导致整个Tomcat线程 ...
- EF与手写Model的区别以及联系
1.在数据库表名上,EF是随意的,但是如果是Model的话,就应该在建立数据库的时候考虑到讲数据库表名变为复数,如Movie.cs 数据库应该为Movies
- eclipse添加删除插件-eclipse marketplace
源文地址:http://jingyan.baidu.com/article/cdddd41c5c883353cb00e19e.html 在有些版本的eclips上并没有eclipse marketpl ...
- webview 最简单的demo
) { return; } view.loadUrl(url); }} <!--activity_test.xml> <?xml version="1.0" en ...
- 利用RandomAccessFile类在指定文件指定位置插入内容
package File; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...
- org.apache.http.NoHttpResponseException: XX.XX.XX.XX:80 failed to respond
解决: Finally I fix the issue and it is caused by buffer size. By default, buffer size of httpclient i ...