【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
2453: 维护队列
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 653 Solved: 283
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2
Q 1 2
R 1 2
Q 1 2
Sample Output
1
HINT
对于100%的数据,有1 ≤ N ≤ 10000, 1 ≤ M ≤ 10000,小朋友A不会修改超过1000次,所有颜色均用1到10^6的整数表示。
Source
2120: 数颜色
Time Limit: 6 Sec Memory Limit: 259 MB
Submit: 2845 Solved: 1105
[Submit][Status][Discuss]
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
1 2 3 4 5 5
Q 1 4
Q 2 6
R 1 2
Q 1 4
Q 2 6
Sample Output
4
3
4
HINT
对于100%的数据,N≤10000,M≤10000,修改操作不多于1000次,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。
2016.3.2新加数据两组by Nano_Ape
Source
Solution
本来想练分块的,旁边的DCrusher爷,一眼爆正解莫队
其实感觉这道题,分块,莫队,主席树都是可以A掉的,但是还是写了莫队
很简单的带修改莫队,比昨天的糖果公园不知道简单到哪去了
至于处理修改,处理出时间戳,在询问前时光倒流和后流,正常莫队就好
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define maxm 20010
#define maxc 1000100
int n,m,bll,ans[maxm],nl=,nr=,nt=,an,pos[maxm],num[maxc],a[maxm],aa[maxm]; bool visit[maxc];
struct Asknode
{
int l,r,t,id;
bool operator < (const Asknode & A) const
{
if (pos[l]==pos[A.l] && pos[r]==pos[A.r]) return t<A.t;
else if (pos[l]==pos[A.l]) return r<A.r;
else return l<A.l;
}
}q[maxm];int qn;
struct Changenode{int x,c,t,pre;}ch[maxm];int cn;
void move(int x)
{
if (visit[x])
{num[a[x]]--;if (num[a[x]]==) an--; visit[x]=;}
else
{num[a[x]]++;if (num[a[x]]==) an++; visit[x]=;}
}
void movedown(int T)
{
int x=ch[T].x,c=ch[T].c;
if (visit[x])
{num[a[x]]--; if (num[a[x]]==) an--; a[x]=c; num[c]++; if (num[c]==) an++;}
else
a[x]=c;
}
void moveforward(int T)
{
int x=ch[T].x,c=ch[T].pre;
if (visit[x])
{num[a[x]]--; if (num[a[x]]==) an--; a[x]=c; num[c]++; if (num[c]==) an++;}
else
a[x]=c;
}
void work(int x)
{
int L=q[x].l,R=q[x].r,id=q[x].id,T=q[x].t;
while (nl<L) move(nl),nl++;
while (nl>L) nl--,move(nl);
while (nr<R) nr++,move(nr);
while (nr>R) move(nr),nr--;
while (nt<T) nt++,movedown(nt);
while (nt>T) moveforward(nt),nt--;
ans[id]=an;
}
int main()
{
n=read(),m=read(); bll=int(sqrt(n));
for (int i=; i<=n; i++) aa[i]=a[i]=read(),pos[i]=(i-)/bll+;
for (int i=; i<=m; i++)
{
char opt[]; scanf("%s",opt); int x=read(),y=read();
if (opt[]=='Q')
qn++,q[qn].id=qn,q[qn].l=x,q[qn].r=y,q[qn].t=cn;
if (opt[]=='R')
cn++,ch[cn].t=i,ch[cn].x=x,ch[cn].c=y,ch[cn].pre=aa[x],aa[x]=y;
}
sort(q+,q+qn+);
for (int i=; i<=qn; i++) work(i);
for (int i=; i<=qn; i++) printf("%d\n",ans[i]);
return ;
}
虽然DCrusher爷一样爆正解,但我觉得他不能轻视1A...
【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法的更多相关文章
- 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法
[题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...
- 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法
[题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...
- 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】
题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...
- 【BZOJ2120】数颜色(带修莫队)
点此看题面 大致题意:告诉你\(n\)只蜡笔的颜色,有两种操作:第一种操作将第\(x\)只蜡笔颜色改成\(y\),第二种操作询问区间\([l,r]\)内有多少种颜色的蜡笔. 考虑普通莫队 这题目第一眼 ...
- BZOJ2120 数颜色 【带修莫队】
BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...
- bzoj 2120: 数颜色【带修改莫队】
比较裸的带修莫队,对每个修改操作记一下它修改的位置修改前的颜色 然后正常莫队,每次对修改操作时间倒流一下即可 #include<iostream> #include<cstdio&g ...
- BZOJ 4129 Haruna’s Breakfast (分块 + 带修莫队)
4129: Haruna’s Breakfast Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 835 Solved: 409[Submit][St ...
- BZOJ 2120 数颜色 【带修改莫队】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 2120: 数颜色 Time Limit: 6 Sec Memory Limit: ...
- BZOJ2120 数颜色(带修改莫队)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
随机推荐
- 规范化注释 VVDocumenter的使用方法
很多时候,为了快速开发,很多的技术文档都是能省则省,这个时候注释就变得异常重要,但是每次都要手动输入规范化的注释,着实也麻烦,但有了VVDocumenter,规范化的注释,主需要输入三个斜线“///” ...
- SQL探险
两张表,取相同字段比较 相同则显示true 否则FALSE.
- JSTL中的TLD配置和使用。
一,JSTL介绍: JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一 ...
- Java集合系列:-----------01集合的整体框架
内容来自:http://www.cnblogs.com/skywang12345/p/3308498.html Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映 ...
- DEDECMS之八 漏洞错误和疑难杂症
1.dedecms文章加粗b属性后出现strong或者b标签修改 dedecms的文章,如果设置了加粗的属性后,文章标题那会自动添加一个strong或者是b标签,如何去掉呢,方法如下: a.更改自动添 ...
- codevs 1907 方格取数 3
Description 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. Input 第 ...
- jquery常用代码
转自:未找到 以下是jquery中比较常用的一些操作实现方式: $("标签名") //取html元素 document.getElementsByTagName("&qu ...
- Ros学习注意点
编译问题 回调函数不能有返回类型,严格按照实例程序编写 第三方库的问题,packet.xml里面必须加上自己的依赖文件 之前文档里面介绍的有点问题. 主要表现在:当你建立包的时候就写入了依赖,那就不需 ...
- Spring Security笔记:解决CsrfFilter与Rest服务Post方式的矛盾
基于Spring Security+Spring MVC的web应用,为了防止跨站提交攻击,通常会配置csrf,即: <http ...> ... <csrf /> </ ...
- CentOS 7下的 Mysql 主从配置
最近在玩mysql主从配置,在此记录一下 一.前言 1.安装两个虚拟机(CentOS 7).iP分别是192.168.47.131 和192.168.47.133.其中192.168.47.133作为 ...