BZOJ2453: 维护队列
2453: 维护队列
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 183 Solved: 89
[Submit][Status]
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
用pre[i]记录前一个和i相同颜色的球的所在位置
询问l到r时,如果pre[i]<r说明在l到i这一段没用和i颜色相同的球,则ans++
利用这种思路我们可以。。。分块
每一块内按pre[i]排序,然后和教主的魔法那题都一样了
-----hzwer
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 10000+1000
#define maxm 1000000+1000
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
using namespace std;
inline 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;
}
int n,m,block,b[maxn],c[maxn],pre[maxn],pos[maxn],last[maxm];
void reset(int x)
{
int l=(x-)*block+,r=min(x*block,n);
for(int i=l;i<=r;i++)pre[i]=b[i];
sort(pre+l,pre+r+);
}
int find(int x,int y)
{
int l=(x-)*block+,r=x*block,mid;
while(l<=r)
{
mid=(l+r)>>;
if(pre[mid]>=y)r=mid-;else l=mid+;
}
return l-(x-)*block-;
}
int query(int x,int y)
{
int sum=,bx=pos[x],by=pos[y];
if(by-bx<=)
{
for(int i=x;i<=y;i++)if(b[i]<x)sum++;
}
else
{
for(int i=x;i<=bx*block;i++)if(b[i]<x)sum++;
for(int i=(by-)*block+;i<=y;i++)if(b[i]<x)sum++;
}
for(int i=bx+;i<by;i++)sum+=find(i,x);
return sum;
}
void change(int x,int y)
{
for(int i=;i<=n;i++)last[c[i]]=;
c[x]=y;
for(int i=;i<=n;i++)
{
int t=b[i];
b[i]=last[c[i]];
last[c[i]]=i;
if(t!=b[i])reset(pos[i]);
}
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();
block=floor(sqrt(n));
for(int i=;i<=n;i++)
{
c[i]=read();
pos[i]=(i-)/block+;
b[i]=last[c[i]];
last[c[i]]=i;
}
for(int i=;i<=pos[n];i++)reset(i);
char ch;int x,y;
while(m--)
{
ch=' ';
while(ch!='Q'&&ch!='R')ch=getchar();x=read();y=read();
if(ch=='R')change(x,y);else printf("%d\n",query(x,y));
}
return ;
}
BZOJ2453: 维护队列的更多相关文章
- [bzoj2453]维护队列_带修改莫队
维护队列 bzoj-2453 题目大意:给定一个n个数序列,支持查询区间数的种类数,单点修改.不强制在线. 注释:$1\le n,m\le 10^5$. 想法: 带修改莫队裸题. 如果没有修改操作的话 ...
- [BZOJ2453]维护队列|分块
Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...
- BZOJ2453维护队列&&BZOJ2120数颜色
2016-05-28 11:20:22 共同的思路: 维护某种颜色上一次在哪里出现pre,可以知道当pre<询问的l时更新答案 块内按照pre排序 修改的时候重新O(n)扫一遍,如果和之前的不一 ...
- bzoj2120: 数颜色 &&bzoj2453: 维护队列
题目大意: 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好 ...
- 【分块】bzoj2453 维护队列
http://www.cnblogs.com/autsky-jadek/p/4020296.html 同bzoj2120. #include<cstdio> #include<cma ...
- [BZOJ2120] 数颜色 && [bzoj2453] 维护队列(莫队 || 分块)
传送门 只有第一个,第二个权限题. 分块,然而wa,没看出来错在哪里,有时间再看. #include <cmath> #include <cstdio> #include &l ...
- 【BZOJ2453】维护队列/【BZOJ2120】数颜色 分块
[BZOJ2453]维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色 ...
- 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 653 Solved: 283[Submit][Status][Discuss] ...
- 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...
随机推荐
- Android Studio常用插件
ButterKnife 这个开源库可以让我们从大量的findViewById()和setonclicktListener()解放出来,其对性能的影响微乎其微(查看过Butter Knife的源码,其自 ...
- USACO lamps
IOI 98称号.然后,它似乎没有很困难.即使我能做到这一点微弱的残留物.所有的button按两次不按,高达因此实际上总的等效按4二级,首先C往下<=4,则搜索将能直接照射,总共只有16状态(事 ...
- [转] The Single Biggest Obstacle to Trading Success
Why do some people succeed spectacularly in the market while others fail? The market is the same for ...
- sql 处理以字符隔开的字符串(类似split)
sql 处理以字符隔开的字符串(类似split)的处理方法. CREATE PROCEDURE dbo.Vip_SendMails @userids varchar(MAX), ), ), @c va ...
- Java基础知识强化82:Random类概述和方法使用
1. Random类 public class Random extends Object implements Serializable: 此类的实例用于生成伪随机数流.此类使用48位种子. (1) ...
- linux 管道命令 小记
管道命令(pipe) 使用“|”界定符号 管道命令必须能够接收来自前一个命令的数据成为standard input才能继续处理 1.选取命令:cut, grep.分析数据,取出我们想要的. -cut ...
- Debian 桌面美化
Debian 桌面美化 安装 gnome-tweak-tool aptitude install gnome-tweak-tool 登陆gnome-look下载主题包 gnome-look上有很多主题 ...
- iis7 发布mvc 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容
iis 7上发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 提示里面的解决方法是: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. 使用 II ...
- js动态新增组合Input标签
var x = 1; function addlink() { var linkdiv = document.getElementById("add1_0"); if (linkd ...
- 用win32API 实现TextBox水印特效
demo效果: