[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的时候, ...
随机推荐
- Linux用户态程序计时方式详解[转]
转自: http://www.cnblogs.com/clover-toeic/p/3845210.html 前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确 ...
- 【数据库】 SQL 使用注意点
[数据库] SQL 使用注意点 一. 索引 1. 常用的搜索条件,都建议加上索引,但状态列除外(该列只有0,1或几个值,不需要加索引,因为没效果) 2. 查询时, 索引列不能做函数处理,会不走索引 3 ...
- 从循环里面用QPixmap new对象很耗时联想到的
1.在循环里面用QPixmap new图片对象延迟很高,这个是通过打时间日志得出的,深层原因还不清楚: 2.自制的图片浏览器在初始化的时候会初始化自己的一个图片列表,所以要用到上面的描述.所有图片的初 ...
- selenide UI自动化进阶二 pageObject实现页面管理
首先定义登录页面,上代码吧 LoginPage.java package com.test.selenium.page; import org.openqa.selenium.By; import s ...
- CSS3 : transition 属性
CSS3的 transition 属性用于状态过度效果! 1.语法: transition: property duration timing-function delay; -moz-transit ...
- ASP NET Core ---POST, PUT, PATCH, DELETE,Model 验证
参照 草根专栏- ASP.NET Core + Ng6 实战:https://v.qq.com/x/page/u0765jbwc6f.html 一.POST 安全性和幂等性 安全性是指方法执行后并不会 ...
- python终极篇 --- django 初识
1. 下载: 命令行: pip install django==1.11.15 pip install -i 源 django==1.11.15 pycharm settings 解释器 点+号 输入 ...
- 梳理 Opengl ES 3.0 (二)剖析一个GLSL程序
OpenGL ES shading language 3.0 也被称作 GLSL,是个 C风格的编程语言. Opengl ES 3.0内部有两种可编程处理单元,即Vertex processor和Fr ...
- [P2387魔法森林
题面 题意: 给出一个图,边权有两维,a与b. 求1到n的一条路径使得路径经过的边的最大的a与b的和最小,输出最小之和. \(Solution:\) 如果做过这题,那么就显得很简单了很好想了. 又是想 ...
- STL Allocator
从上面这个程序可以看出,我们这里手动使用了分配器,分配器有很多种类,有std::,还有非std::,也就是上面的__gnu_cxx下面的,我们在使用容器的时候不关心我们使用什么分配器,也不关心我们如何 ...