[BZOJ2453]维护队列|分块
Description
你小时候玩过弹珠吗?小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N。为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少。当然,A有时候会依据个人喜好,替换队列中某个弹珠的颜色。但是A还没有学过编程,且觉得头脑风暴太浪费脑力了,所以向你来寻求帮助。
program bzoj2453;
const maxn=;maxm=;
var n,m,i,block,x,y,q:longint;
ch:char;
pos,a,b,pre:array[-..maxn]of longint;
last:array[-..maxm]of longint; function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end; procedure qsort(L,R:longint);
var i,j,mid:longint;
begin
i:=L;j:=R;mid:=pre[random(R-L+)+L];
repeat
while (i<R)and(pre[i]<mid) do inc(i);
while (L<j)and(pre[j]>mid) do dec(j);
if i<=j then
begin
pre[]:=pre[i];pre[i]:=pre[j];pre[j]:=pre[];
inc(i);dec(j);
end;
until i>j;
if i<R then qsort(i,R);
if L<j then qsort(L,j);
end; procedure new(x:longint);
var l,r,i:longint;
begin
l:=(x-)*block+;r:=min(x*block,n);
for i:=l to r do pre[i]:=b[i];
qsort(l,r);
end; procedure change(x,y:longint);
var i:longint;
begin
for i:= to n do last[a[i]]:=;
a[x]:=y;
for i:= to n do
begin
if last[a[i]]<>b[i] then
begin b[i]:=last[a[i]];
new(pos[i]);
end;
b[i]:=last[a[i]];
last[a[i]]:=i;
end;
end; function find(x,y:longint):longint;
var L,R,mid:longint;
begin
find:=(x-)*block;
L:=find+;R:=min(x*block,n);
while L<=R do
begin
mid:=(L+R) >> ;
if pre[mid]<=y then
begin
find:=mid;L:=mid+;
end else R:=mid-;
end;
dec(find,(x-)*block);
end; procedure build;
var i:longint;
begin
for i:= to n do last[a[i]]:=;
for i:= to n do
begin
b[i]:=last[a[i]];
last[a[i]]:=i;
end;
for i:= to m do new(i);
end; function query(x,y:longint):longint;
var i,tot:longint;
begin
tot:=;
if pos[x]=pos[y] then
begin
for i:=x to y do if b[i]<=x- then inc(tot);
end else
begin
for i:=x to pos[x]*block do if b[i]<=x- then inc(tot);
for i:=(pos[y]-)*block+ to y do if b[i]<=x- then inc(tot);
for i:=pos[x]+ to pos[y]- do inc(tot,find(i,x-));
end;
exit(tot);
end; begin
readln(n,q);
block:=trunc(sqrt(n));
for i:= to n do
begin
read(a[i]);
pos[i]:=(i-) div block+;
end;
readln;
if n mod block= then m:=n div block else m:=n div block+;
build;
for i:= to q do
begin
read(ch);
if ch='Q' then
begin
readln(x,y);
writeln(query(x,y));
end else
begin
readln(x,y);
change(x,y);
end;
end;
end.
[BZOJ2453]维护队列|分块的更多相关文章
- BZOJ2453: 维护队列
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 183 Solved: 89[Submit][Status] Descripti ...
- [bzoj2453]维护队列_带修改莫队
维护队列 bzoj-2453 题目大意:给定一个n个数序列,支持查询区间数的种类数,单点修改.不强制在线. 注释:$1\le n,m\le 10^5$. 想法: 带修改莫队裸题. 如果没有修改操作的话 ...
- [BZOJ2120] 数颜色 && [bzoj2453] 维护队列(莫队 || 分块)
传送门 只有第一个,第二个权限题. 分块,然而wa,没看出来错在哪里,有时间再看. #include <cmath> #include <cstdio> #include &l ...
- 【bzoj2453】维护队列 (分块 + 二分)
传送门(权限题) 题目分析 题意为:求区间内有多少种不同的数,带修改. 首先对原序列分块,用last[i]表示与i相同的上一个在哪里,然后将分块后的数组每个块内的按照last进行排序,这样查询时就可以 ...
- 【分块】bzoj2453 维护队列
http://www.cnblogs.com/autsky-jadek/p/4020296.html 同bzoj2120. #include<cstdio> #include<cma ...
- BZOJ2453维护队列&&BZOJ2120数颜色
2016-05-28 11:20:22 共同的思路: 维护某种颜色上一次在哪里出现pre,可以知道当pre<询问的l时更新答案 块内按照pre排序 修改的时候重新O(n)扫一遍,如果和之前的不一 ...
- bzoj2120: 数颜色 &&bzoj2453: 维护队列
题目大意: 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好 ...
- 【BZOJ2473/2120】维护队列 分块+二分
Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...
- BZOJ 2453 维护队列 | 分块
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题解: 考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候, ...
随机推荐
- FRDM-KL25Z开发板上电试用
1. 硬件平台:FRDM-KL25Z开发板,先看下板子,Cortex M0+的内核,板子上自带MMA8451Q的三轴加速度传感器,触摸滑动按键,openSDA调试器.MCU主频48MHz,有16KB ...
- 【连载】Maven系列(四)——配置私服
相关文章 1.<用起来超爽的Maven——入门篇> 2.<用起来超爽的Maven——进阶篇> 3.<Maven系列(三) 进阶> 一.为什么需要私服 有些公司并不提 ...
- Halcon17无法加载"hdevenginecpp":找不到指定的模块
Halcon17无法加载"hdevenginecpp":找不到指定的模块 在C#和Halcon17混合编程中,当执行private HDevEngine MyEngine = ne ...
- 搭建高可用的Eureka注册中心
搭建高可用的Eureka注册中心 一.搭建高可用的Eureka的作用 当服务器因种种原因导致Eureka注册中心(后面简称Eureka)服务当机(服务器跪了,异常关闭停止服务).这样就会影响到整个业务 ...
- XmlAutoGo
一个基于 Selenium 3.14.0的脚本执行工具,支持自动化解决方案.Github https://github.com/freeol/XmlAutoGo Document https://xm ...
- 基本数据类型的成员变量放在jvm的哪块内存区域里?
几个月前自己提问的一个问题没人回答,现在突然翻到,自己回答下: 问题: 比如class{private int i;}如上代码,之前一直以为基本数据类型都是放在虚拟机栈中的,最近看了<深入理解j ...
- 安装并配置maven
1下载Maven 2添加仓库(仓库就是maven项目统一存放依赖的地方 根据groupId ArtifactId Version来组成项目依赖路径) conf——settings.xml------- ...
- http短连接大量time wait解决方案
tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接 ...
- 数组中键key相等时,后面的值覆盖前面的值
<?php $arr[]='abc'; $arr[]='; $arr[]='; $arr[]='; var_dump($arr); 结果;
- 算法(8)Maximum Product Subarray
题目:在一个数组中找到一个子数组,让子数组的乘积最大,比如[2,3,-2,4]返回6 思路:之前自己想到的思路是对于一个int类型的数组,只要负数的个数是偶数,那么乘积肯定是全局乘就可以了,然后对于负 ...