题目:

http://www.lydsy.com/JudgeOnline/problem.php?id=2453


题解:

考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候,如果pre[i]<l,ans++

所以每次询问时整块的按pre排序,之后的做法类似教主的魔法

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define N 10005
#define M 1000005
using namespace std;
int n,q,m,block;
int c[N],pos[N],pre[N],b[N],last[M],x,y;
char ch[];
int find(int x,int v)
{
int l=(x-)*block+,r=min(x*block,n);
int first=l;
while (l<=r)
{
int mid=l+r>>;
if (pre[mid]<v) l=mid+;
else r=mid-;
}
return l-first;
}
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+);
}
void build()
{
for (int i=;i<=n;i++)
{
b[i]=last[c[i]];
last[c[i]]=i;
pos[i]=(i-)/block+;
}
for (int i=;i<=m;i++) reset(i);
}
int ask(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<=block*pos[l];i++) if (b[i]<l) ans++;
for (int i=block*(pos[r]-)+;i<=r;i++) if (b[i]<l) ans++;
}
for (int i=pos[l]+;i<pos[r];i++)
ans+=find(i,l);
return ans;
}
void change(int x,int v)
{
for (int i=;i<=n;i++) last[c[i]]=;
c[x]=v;
for (int i=;i<=n;i++)
{
int t=b[i];
b[i]=last[c[i]];
if (t!=b[i]) reset(pos[i]);
last[c[i]]=i;
}
}
int main()
{
scanf("%d%d",&n,&q);
for (int i=;i<=n;i++)
scanf("%d",&c[i]);
block=int(sqrt(n)+log(*n)/log());
if (n%block) m=n/block+;
else m=n/block;
build();
for (int i=;i<=q;i++)
{
scanf("%s%d%d",ch,&x,&y);
if (ch[]=='Q') printf("%d\n",ask(x,y));
else change(x,y);
}
return ;
}

BZOJ 2453 维护队列 | 分块的更多相关文章

  1. Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 578  Solved: 247[Submit][Status][Discuss] ...

  2. bzoj 2453 : 维护队列 带修莫队

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 952  Solved: 432[Submit][Status][Discuss] ...

  3. bzoj 2453: 维护队列

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1079  Solved: 503[Submit][Status][Discuss ...

  4. BZOJ.2453.维护队列([模板]带修改莫队)

    题目链接 带修改莫队: 普通莫队的扩展,依旧从[l,r,t]怎么转移到[l+1,r,t],[l,r+1,t],[l,r,t+1]去考虑 对于当前所在的区间维护一个vis[l~r]=1,在修改值时根据是 ...

  5. 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)

    2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...

  6. Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 2645  Solved: 1039[Submit][Status][Discuss] ...

  7. 【BZOJ】2453: 维护队列【BZOJ】2120: 数颜色 二分+分块(暴力能A)

    先说正解:把所有相同的数相成一个链在每一个区间里的种数就是不同链的链头,那么记录每个数的上个相同数所在位置,那么只要找出l到r之间前驱值在l之前的数的个数就可以了 本人打的暴力,有一个小技巧,用cha ...

  8. BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 3665  Solved: 1422[Submit][Status][Discuss] ...

  9. [bzoj] 2453 维护数列 || 单点修改分块

    原题 询问区间有种个颜色,单点修改某个位置. 修改次数<=1000 维护pre[i]为前一个与当前位置颜色一样的位置. 询问时以pre为关键字sort,lower_bound找pre<x的 ...

随机推荐

  1. Scott Young-《如何高效学习》

    1.如果你只用一种方式了解某样事物,那么你就没有真正了解它.事情真正含义的秘密取决于我们如何将其与我们所了解的其他事情相联系.很好联系的内容可使你将想法融于脑中,从各种角度看问题,直至你找到合适自己的 ...

  2. pip更改国内源

    国内源: 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/豆瓣(dou ...

  3. LeetCode970. 强整数

    问题:970. 强整数 用户通过次数0 用户尝试次数0 通过次数0 提交次数0 题目难度Easy 给定两个非负整数 x 和 y,如果某一整数等于 x^i + y^j,其中整数 i >= 0 且  ...

  4. 服务器缺少vcruntime140.dll,无法运行

    Redis用了一段时间,有的时候,调试的时候,RedisDesktop是个不错的工具 当我想在服务器上安装的时候,才发现服务器64位的环境里面运行出错了 百度上有共享dll出来的,但是基本都没法用,虽 ...

  5. php jsonp实例 mip无限滚动组件接口注意事项

    在改造mip的过程中,很多同学遇到这样一个问题.mip无限滚动问题 异步请求数据接口(仅支持 JSONP 请求) 异步请求接口需要规范 callback 为 'callback' 那么什么是JSONP ...

  6. &、|、~与&&、||、! 谬误

    按位运算符(&.|.~)的操作是被默认为一个二进制的位序列,分别对其中的每个位进行操作. 逻辑运算符(&&.||.!)将操作数当成非真及假,非假及真.通常就是将0当成假,非0即 ...

  7. 指定的参数已超出有效值的范围。 参数名: site

    “/”应用程序中的服务器错误. 指定的参数已超出有效值的范围.参数名: site 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的 ...

  8. div+css实现双飞翼布局

    本例通过div+css实现HTML金典布局双飞翼布局,该布局结构为上中下结构,上:header头:下:footer尾:中:内容,将内容分为了三个结构,左中右 下图是效果图 我们来看下代码 <!D ...

  9. 7 Vue.js实现loading1

    1 2 3 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter ...

  10. 3 Vue.js

    1 2 3 <script> var vm = new Vue({ el:"#app", //context data:{ //context["articl ...