原题

询问区间有种个颜色,单点修改某个位置。

修改次数<=1000


维护pre[i]为前一个与当前位置颜色一样的位置。

询问时以pre为关键字sort,lower_bound找pre<x的就是当前区间的答案

因为修改次数少,所以每次重新搞就行。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10010
#define B 100
#define bel(x) ((x-1)/B+1)
#define st(x) ((x-1)*B+1)
#define ed(x) (x==bel(n)?n:(x*B))
using namespace std;
int n,q,a[N],pre[N],spre[N],lst[N*100],x,y;
char op[3]; int read()
{
int ans=0,fu=1;
char j=getchar();
for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
} int query(int x,int y)
{
int ret=0;
if (bel(x)==bel(y))
{
for (int i=x;i<=y;i++)
if (pre[i]<x) ret++;
return ret;
}
for (int i=x;i==x || i%B!=1;i++)
if (pre[i]<x) ret++;
for (int i=y;i==y || i%B!=0;i--)
if (pre[i]<x) ret++;
for (int i=bel(x)+1;i<bel(y);i++)
ret+=lower_bound(spre+st(i),spre+ed(i)+1,x)-(spre+st(i));
return ret;
} void build()
{
memset(lst,0,sizeof(lst));
for (int i=1;i<=n;i++)
spre[i]=pre[i]=lst[a[i]],lst[a[i]]=i;
for (int i=1;i<=bel(n);i++)
sort(spre+st(i),spre+ed(i)+1);
} void change()
{
for (int i=1;i<=n;i++) lst[a[i]]=0;
a[x]=y;
for (int i=1;i<=n;i++)
{
int t=pre[i];
pre[i]=lst[a[i]];
if (t!=pre[i])
{
for(int j=st(bel(i));j<=ed(bel(i));j++)
spre[j]=pre[j];
sort(spre+st(bel(i)),spre+ed(bel(i))+1);
}
lst[a[i]]=i;
}
} int main()
{
n=read();
q=read();
for (int i=1;i<=n;i++) a[i]=read();
build();
while (q--)
{
scanf("%s",op);
x=read();y=read();
if (op[0]=='Q') printf("%d\n",query(x,y));
else change();
}
return 0;
}

[bzoj] 2453 维护数列 || 单点修改分块的更多相关文章

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

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

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

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

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

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

  4. bzoj 2453: 维护队列

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

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

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

  6. BZOJ 2453 维护队列 | 分块

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题解: 考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候, ...

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

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

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

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

  9. 洛谷 P2042 [NOI2005]维护数列-Splay(插入 删除 修改 翻转 求和 最大的子序列)

    因为要讲座,随便写一下,等讲完有时间好好写一篇splay的博客. 先直接上题目然后贴代码,具体讲解都写代码里了. 参考的博客等的链接都贴代码里了,有空再好好写. P2042 [NOI2005]维护数列 ...

随机推荐

  1. 使用工具Android Studio实现一个简单的Android版的新闻APP

    目的: 这是我学完Android课程后所写的一个小的.简单版的新闻APP 技术概要: 用到了SQLite数据库,用它来存储每篇新闻下的评论 新闻的来源是新浪新闻,我通过使用Fiddler来对新浪新闻A ...

  2. 爬虫学习(十五)——json解析

    json与jsonpath 对象{}:jsonobject 对象:对象在js中表现为{}括起来的内容,数据结构为{key:value,key:value...}键值对的结构,在面向对象的结构中,key ...

  3. 【PHP项目】【Smarty】Smarty截取字符串方法truncate

    smarty truncate 截取字符串  //在sql中truncate是删除表格(truncate是只删除内容,delete彻底删除)从字符串开始处截取某长度的字符,默认的长度为80指定第二个参 ...

  4. Linux基础知识与命令1(su passwd)

    一.Linux的基本原则 1.linux由一个个目的单一的小程序组成,我们一般需要组合小程序来完成复杂的任务 2.Linux的一切都是文件(文件类似于一棵树,包括外设,接口) 3.Linux尽量避免捕 ...

  5. E - Nature Reserve CodeForces - 1059D

    传送门 There is a forest that we model as a plane and live nn rare animals. Animal number iihas its lai ...

  6. 机器学习实战 -- 决策树(ID3)

    机器学习实战 -- 决策树(ID3)   ID3是什么我也不知道,不急,知道他是干什么的就行   ID3是最经典最基础的一种决策树算法,他会将每一个特征都设为决策节点,有时候,一个数据集中,某些特征属 ...

  7. 17-比赛1 F - 较小元素 Weak in the Middle (set)

    Seg-El has last chance to make the final changes in order to prevent the destruction of Krypton. He ...

  8. java 中实体Bean和Map互相转化

    技术交流群: 233513714 // 将一个map对象转化为bean public static void transMap2Bean(Map<String, Object> map, ...

  9. Eclipse Java 构建路径 ---Eclipse教程第13课

    Eclipse Java 构建路径 设置 Java 构建路径 Java构建路径用于在编译Java项目时找到依赖的类,包括以下几项: 源码包 项目相关的 jar 包及类文件 项目引用的的类库 我们可以通 ...

  10. springmvc上传图片并显示--支持多图片上传

    实现上传图片功能在Springmvc中很好实现.现在我将会展现完整例子. 开始需要在pom.xml加入几个jar,分别是: <dependency> <groupId>comm ...