【BZOJ2473/2120】维护队列 分块+二分
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数组,记录前一个相同颜色的位置,块内排序,有点像一个链?,然后查询时只要比pre【i】比l小,则同一个块内前面的都满足。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define N 10010
using namespace std;
int last[],pre[N],a[N],b[N],pos[N];
int n,m,q,block;
void build()
{
for (int i=;i<=n;i++)
{
b[i]=last[a[i]];
last[a[i]]=i;
pos[i]=(i-)/block+;
}
}
void make_block(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 er_find(int x,int v)
{
int l=(x-)*block+,r=min(x*block,n),l1;
l1=l;
while (l<=r)
{
int mid=(l+r)>>;
if (pre[mid]<v) l=mid+;
else r=mid-;
}
return l-l1;
}
int query(int l,int r)
{
int ans=;
if (pos[l]==pos[r]) {for (int i=l;i<=r;i++) if (b[i]<l) ans++;}
else
{
for (int i=l;i<=pos[l]*block;i++) if (b[i]<l) ans++;
for (int i=(pos[r]-)*block+;i<=r;i++) if (b[i]<l) ans++;
for (int i=pos[l]+;i<pos[r];i++) ans+=er_find(i,l);
}
return ans;
}
void change(int x,int v)
{
for (int i=;i<=n;i++) last[a[i]]=;
a[x]=v;
for (int i=;i<=n;i++)
{
int t=b[i];
b[i]=last[a[i]];
if (t!=b[i]) make_block(pos[i]);
last[a[i]]=i;
}
}
int main()
{
scanf("%d%d",&n,&q);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
block=int(sqrt(n));
if (n%block) m=n/block+;
else m=n/block;
build();
for (int i=;i<=m;i++) make_block(i);
for (int i=;i<=q;i++)
{
char ch[];
int x,y;
scanf("%s%d%d",ch,&x,&y);
if (ch[]=='Q') printf("%d\n",query(x,y));
else change(x,y);
}
return ;
}
【BZOJ2473/2120】维护队列 分块+二分的更多相关文章
- 【bzoj2453】维护队列 (分块 + 二分)
传送门(权限题) 题目分析 题意为:求区间内有多少种不同的数,带修改. 首先对原序列分块,用last[i]表示与i相同的上一个在哪里,然后将分块后的数组每个块内的按照last进行排序,这样查询时就可以 ...
- [BZOJ2453]维护队列|分块
Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...
- BZOJ 2453 维护队列 | 分块
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题解: 考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候, ...
- 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...
- 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 653 Solved: 283[Submit][Status][Discuss] ...
- 【bzoj2453】维护队列/【bzoj2120】数颜色 分块+二分
题目描述 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好, ...
- Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 578 Solved: 247[Submit][Status][Discuss] ...
- 【BZOJ2453】维护队列/【BZOJ2120】数颜色 分块
[BZOJ2453]维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色 ...
- BZOJ2453: 维护队列
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 183 Solved: 89[Submit][Status] Descripti ...
随机推荐
- 全局压缩http响应头
见代码: public class CompressAttribute : ActionFilterAttribute { public override void OnActionExecuting ...
- ASP.NET Web Api 安全性(转载)
转载地址:http://www.cnblogs.com/fzrain/p/3552423.html 在Web Api中强制使用Https 我们可以在IIS级别配置整个Web Api来强制使用Https ...
- python中的Iterable, Iterator,生成器概念
https://nychent.github.io/articles/2016-05/about-generator.cn 这个深刻 谈起Generator, 与之相关的的概念有 - {list, s ...
- poj 3468:A Simple Problem with Integers(线段树,区间修改求和)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 58269 ...
- JAVA 堆栈知识和Volatile关键字
栈内存:存放基本类型的变量和对象的引用 堆内存:存放用new创建的对象和数组 栈帧:保存了局部变量表,操作数栈,方法的返回地址以及其它的附加信息 volatile修饰的变量,jvm虚拟机只是保证从主内 ...
- java compiler level does not match the version of the installed java project
修改:工程/.settings/”目录下找到名为 org.eclipse.wst.common.project.facet.core.xml
- golang channel basic
package mainimport ( "fmt" "math/rand" "time")func main() { rand.Seed( ...
- css3 妙味
css3 属性 <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...
- Parallel.js初探
今天闲着看了一下Parallel.js.这个库暂时貌似还没有什么中文的介绍(可能暂时用的人都不多吧).所以就只能上github找它得源码和介绍看看了.貌似它的代码也不多,以后可以深入研究一下. 先简单 ...
- [荐]js模版引擎handlebars.js
[官方介绍:http://handlebarsjs.com/] Handlebars provides the power necessary to let you build semantic te ...