[bzoj2120][数颜色] (暴力 or 分块)
Description
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?
Input
第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。
Output
对于每一个Query的询问,你需要在对应的行中给出一个数字,代表第L支画笔到第R支画笔中共有几种不同颜色的画笔。
Sample Input
Q
Q
R
Q
Q
Sample Output
HINT
对于100%的数据,N≤10000,M≤10000,修改操作不多于1000次,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。
2016.3.2新加数据两组by Nano_Ape
Solution
先上简单的暴力,可以水过
#include <stdio.h>
#include <string.h>
#define M 1000010 inline int Rin() {
int x=,c=getchar(),f=;
for(; c<||c>; c=getchar())
if(c==)f=-;
for(; c>&&c<; c=getchar())
x=(x<<)+(x<<)+c-;
return x*f; } char c;
int g[M],n,m,a[M],top,x,y,i,mark[M],ans; int main() {
n=Rin(),m=Rin();
for(i=; i<=n; i++) {
a[i]=Rin();
if(!g[a[i]])
g[a[i]]=++top;
a[i]=g[a[i]]; }
while(m--) {
do c=getchar(); while(c!='Q'&&c!='R');
x=Rin(),y=Rin();
if(c=='Q') {
for(i=x,ans=; i<=y; i++)
if(mark[a[i]]!=m)
mark[a[i]]=m,ans++;
printf("%d\n",ans);
}
else {
if(!g[y])g[y]=++top;
a[x]=g[y];
}
}
return ;
}
一下是莫队的做法
otz menci
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define N 10010
#define M 1000010
#define RG register
#define inline __inline__ __attribute__((always_inline)) inline void Rin(RG int &x) {
x=;RG int c=getchar(),f=;
for(; c<||c>; c=getchar())
if(c==)f=-;
for(; c>&&c<; c=getchar())
x=(x<<)+(x<<)+c-;
x*=f; } int n,m,block_size,a[N],utop,qtop,ans[N],cnt[M]; struct Update {
int pos,eld,now; }U[N]; struct Request{
int tim,l,r,id; bool operator < (const Request &other)const {
if(l/block_size == other.l/block_size) {
if(r/block_size == other.r/block_size)
return tim < other.tim;
return r/block_size < other.r/block_size; }
return l/block_size < other.l/block_size; } }Q[N]; inline void prepare() {
static int nowlist[N];
memcpy(nowlist,a,sizeof a);
for(RG int i=; i<=utop; i++) {
U[i].eld=nowlist[U[i].pos];
nowlist[U[i].pos]=U[i].now; } } inline void extend(RG int &tmp,RG int pos,RG int dir) {
if(dir == ) {
if(++cnt[a[pos]]==)
tmp++; }
else
if(--cnt[a[pos]]==)
tmp--; } inline void modify(RG int &tmp,RG int T,RG int l,RG int r,RG int dir) {
RG Update x=U[T];
if(dir == ) {
a[x.pos]=x.now;
if(x.pos >=l && x.pos <= r) {
if(--cnt[x.eld]==)tmp--;
if(++cnt[x.now]==)tmp++; } }
else {
if(x.pos >=l && x.pos <= r) {
if(--cnt[x.now]==)tmp--;
if(++cnt[x.eld]==)tmp++; }
a[x.pos]=x.eld; } } inline void block_solve() {
for(RG int l=,r=,ans=,T=,i=; i<=qtop; i++) {
while(r < Q[i].r)extend(ans,++r,);
while(r > Q[i].r)extend(ans,r--,-); while(l > Q[i].l)extend(ans,--l,);
while(l < Q[i].l)extend(ans,l++,-); while(T < Q[i].tim)modify(ans,++T,l,r,);
while(T > Q[i].tim)modify(ans,T--,l,r,-);
:: ans[Q[i].id]=ans; } } int main() { Rin(n),Rin(m);
for(RG int i=; i<=n; i++)
Rin(a[i]);
for(RG int i=; i<=m; i++) {
RG char c;
do c=getchar(); while(c != 'Q'&&c != 'R');
if(c == 'Q') {
++qtop;
Rin(Q[qtop].l),Rin(Q[qtop].r);
Q[qtop].id=qtop;
Q[qtop].tim=utop; }
else {
++utop;
Rin(U[utop].pos),Rin(U[utop].now); } } prepare();
block_size=floor(pow(n,2.0/)+);
std::sort(Q+,Q++qtop);
block_solve(); for(RG int i=; i<=qtop;i++)
printf("%d\n",ans[i]);
return ; }
[bzoj2120][数颜色] (暴力 or 分块)的更多相关文章
- bzoj2120: 数颜色 [莫队][分块]
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- BZOJ2120 数颜色 【带修莫队】
BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...
- bzoj2120 数颜色 莫队 带修改
[bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- BZOJ2120 数颜色(带修改莫队)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- BZOJ2120 数颜色(树套树)
B. 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令:1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色 ...
- BZOJ2120 数颜色 【带修改莫队】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 6579 Solved: 2625 [Submit][Status][Discus ...
- BZOJ2120 数颜色 —— 待修改莫队
题目链接:https://vjudge.net/problem/HYSBZ-2120 2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: ...
- [Bzoj2120]数颜色 (非正解 )(莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6286 Solved: 2489[Submit][Status][Discuss] ...
- bzoj2120: 数颜色(BIT套主席树+set/分块)
带修改的 HH的项链. 带修改考虑用BIT套主席树,查区间里有几个不同的数用a[i]上次出现的位置pre[i]<l的数有几个来算就好了. 考虑怎么修改.修改i的时候,我们需要改变i同颜色的后继的 ...
随机推荐
- zf-关于分页必写的代码
1 存储过程 ALTER PROCEDURE [dbo].[getStatForXXGKWeb] ), ), ), @page int, -- 必写的 @pageRows int,-- 必写的 @al ...
- TCP/IP Protocol Fundamentals Explained with a Diagram
最近准备系统学习网络相关的知识,主要学习tcp/ip, websocket 知识. 原文地址:http://www.thegeekstuff.com/2011/11/tcp-ip-fundamenta ...
- 页面新宠图片格式WebP
WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式.图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间.Facebook Ebay等知名网站已经开始测 ...
- 自定义View常处理的回调函数
自定义View常处理的回调函数 onFinishInflate() 当View中所有的子控件均被映射成xml后触发 onMeasure(int, int) 确定所有子元素的大小 onLayout(bo ...
- RocketMQ源码 — 三、 Producer消息发送过程
Producer 消息发送 producer start producer启动过程如下图 public void start(final boolean startFactory) throws MQ ...
- CALayer --> UIView
一.CALayer和UIView的关系 UIView显示在屏幕上归功于CALayer 可以说:UIView依赖CALayer,又高于CALayer 通过调用drawRect方法来渲染自身的内容,调节C ...
- 原创:运行loadtest时报错the load test results repository was created with a previous version and is not compatible
如果run setting中的Storage Type设置为DataBase,则需要设置数据库来保存loadtest的运行结果,如下图所示 图:Storage Type设置为DataBase 图:在M ...
- 使用PowerDesigner画ER图详细教程
转:http://www.360doc.com/content/11/0624/15/2617151_129276457.shtml 一.概念数据模型概述数据模型是现实世界中数据特征的抽象.数据模型应 ...
- 在js中如何得到上传文件的大小。
<html> <head> <script language="javascript"> function getSize() { ...
- js图片未加载完显示loading效果
<html> <title>js图片未加载完显示loading效果</title> <body> <style> img{float:lef ...