分块大法好 orz

处理出每个点的前驱和后继位置。

暴力修改,查询就在每个整块里查询pre<l的,暴力跑两边就好了

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 10005
using namespace std;
int n,m,nn,a[N],be[N],pre[N],nxt[N];
int last[1000005],pp[N],ans;
void work(int x){
int l=(x-1)*nn+1,r=min(n,x*nn);
for(int i=l;i<=r;i++)
pp[i]=pre[i];
sort(pp+l,pp+r+1);
}
void change(int x,int y){
a[x]=y;
if(nxt[x]){pre[nxt[x]]=pre[x];work(be[nxt[x]]);}
if(pre[x]){nxt[pre[x]]=nxt[x];work(be[pre[x]]);}
int pr=0,ne=0;
for(int i=1;i<=n;i++){
if(i<x&&a[i]==y) pr=i;
if(i>x&&a[i]==y){ne=i;break;}
}
pre[x]=pr; nxt[x]=ne;
work(be[x]);
if(pr) {nxt[pr]=x;work(be[pr]);}
if(ne) {pre[ne]=x;work(be[ne]);}
}
int main()
{
scanf("%d%d",&n,&m);
nn=(int) sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
be[i]=(i-1)/nn+1;
}
for(int i=1;i<=n;i++){
pre[i]=last[a[i]];
last[a[i]]=i;
if(pre[i]) nxt[pre[i]]=i;
}
int tot=be[n];
for(int i=1;i<=tot;i++)work(i);
char ch; int x,y,l,r,num;
while(m--){
ch=getchar();
while(ch!='Q'&&ch!='R')ch=getchar();
scanf("%d%d",&x,&y);
if(ch=='Q'){
ans=0;
if(be[x]==be[y]){
for(int i=x;i<=y;i++)if(pre[i]<x)ans++;
printf("%d\n",ans); continue;
}
for(int i=x;i<=be[x]*nn;i++)
if(pre[i]<x) ans++;
for(int i=(be[y]-1)*nn+1;i<=y;i++)
if(pre[i]<x) ans++;
for(int i=be[x]+1;i<be[y];i++){
l=(i-1)*nn+1,r=min(n,i*nn);
num=lower_bound(pp+l,pp+r+1,x)-pp;
ans+=num-l;
}
printf("%d\n",ans);
}
if(ch=='R') change(x,y);
}
return 0;
}

bzoj2120 数颜色 分块的更多相关文章

  1. Luogu 1903 数颜色 | 分块

    Luogu 1903 数颜色 | 分块 莫队不会啊-- 这道题直接分块也能卡过! 这道题的做法很有趣:对于每个位置i,记录它的颜色a[i]上一次出现的位置,记为pre[i]. 这样在查询一个区间[l, ...

  2. BZOJ2120 数颜色 【带修莫队】

    BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...

  3. 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法

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

  4. BZOJ 2120: 数颜色 分块

    2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...

  5. bzoj2120 数颜色 莫队 带修改

    [bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...

  6. BZOJ2120 数颜色(树套树)

    B. 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令:1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色 ...

  7. BZOJ2120 数颜色 【带修改莫队】

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 6579  Solved: 2625 [Submit][Status][Discus ...

  8. BZOJ2120 数颜色 —— 待修改莫队

    题目链接:https://vjudge.net/problem/HYSBZ-2120 2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit:  ...

  9. [Bzoj2120]数颜色 (非正解 )(莫队)

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

随机推荐

  1. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(优先初始化Spring IOC容器)

    JavaWebSpringTomcatCache  最近用到在Tomcat服务器启动时自动加载数据到缓存,这就需要创建一个自定义的缓存监听器并实现ServletContextListener接口,并且 ...

  2. 简单剖析Node中的事件监听机制(一)

    使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...

  3. springAOP之代理

    AOP是指面向切面编程. 在学习AOP之前先来了解一下代理,因为传说中的AOP其实也对代理的一种应用. 首先来看这样一段代码: public interface Hello { void say(St ...

  4. Coursera-AndrewNg(吴恩达)机器学习笔记——第二周

    一.多变量线性回归问题(linear regression with multiple variables) 搭建环境OctaveWindows的安装包可由此链接获取:https://ftp.gnu. ...

  5. 分布式配置管理平台XXL-CONF

    <分布式配置管理平台XXL-CONF>      一.简介 1.1 概述 XXL-CONF 是一个分布式配置管理平台,提供统一的配置管理服务.现已开放源代码,开箱即用. 1.2 特性 1. ...

  6. 函数上下文this

    一般来说谁调用上下文都指向谁,具体有以下几种情况: 1.函数用圆括号调用,函数的上下文是window 注意:所有的全局变量都是window的属性,而函数里边定义的变量谁的属性也不是. 2.函数作为对象 ...

  7. leetcode_1. Two Sum

    leetcode_1. Two Sum 前言: 这段时间开始敲leetcode.我认为这并不仅仅只是为了应付笔试,面试.而是确实有着一定的意义. 尤其,你提交代码后,网站会多方面验证你的答案. 另外, ...

  8. Python_替换当前目录下文件类型

    ''' 将当前目录的所有扩展名为html的文件重命名为扩展名为htm的文件 方法一 ''' import os file_list=os.listdir('.') for filename in fi ...

  9. Java并发包之同步队列SynchronousQueue理解

    1 简介 SynchronousQueue是这样一种阻塞队列,其中每个put必须等待一个take,反之亦然.同步队列没有任何内部容量,甚至连一个队列的容量都没有.不能在同步队列上进行peek,因为仅在 ...

  10. Exchanger兄弟线程间数据信息交换

    一.简述 Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据.当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用 ...