2016-05-28 11:20:22

共同的思路:

维护某种颜色上一次在哪里出现pre,可以知道当pre<询问的l时更新答案

块内按照pre排序

修改的时候重新O(n)扫一遍,如果和之前的不一样,则重置所在块

查询时和普通分块一样,整块二分,两边暴力

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

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

#include<bits/stdc++.h>
#define inf 1000000000
#define ll long long
#define N 10005
#define M 1000005
using namespace std;
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 block,n,m,q;
int a[N],b[N],c[N],pre[M],pos[N];
char ch[];
void reset(int x){
int l=(x-)*block+,r=min(x*block,n);
for(int i=l;i<=r;i++)b[i]=a[i];
sort(b+l,b+r+);
}
void update(int x,int v){
for(int i=;i<=n;i++)pre[c[i]]=;
c[x]=v;
for(int i=;i<=n;i++){
int t=a[i];
a[i]=pre[c[i]];
if(t!=a[i])reset(pos[i]);
pre[c[i]]=i;
}
}
int find(int x,int v){
int l=(x-)*block+,r=x*block,mid,tmp;
while(l<=r){
mid=l+r>>;
if(b[mid]<v)tmp=mid,l=mid+;
else r=mid-;
}
return tmp-(x-)*block;
}
int query(int l,int r){
int ans=;
if(pos[l]==pos[r]){
for(int i=l;i<=r;i++)if(a[i]<l)ans++;
}
else{
for(int i=l;i<=block*pos[l];i++)if(a[i]<l)ans++;
for(int i=(pos[r]-)*block+;i<=r;i++)if(a[i]<l)ans++;
}
for(int i=pos[l]+;i<pos[r];i++)ans+=find(i,l);
return ans;
}
int main(){
n=read();q=read();
for(int i=;i<=n;i++){
c[i]=read();a[i]=pre[c[i]];
pre[c[i]]=i;
}
block=(int)sqrt(n);
for(int i=;i<=n;i++)pos[i]=(i-)/block+;
if(n%block)m=n/block+;else m=n/block;
for(int i=;i<=m;i++)reset(i);
while(q--){
scanf("%s",ch);
int x=read(),y=read();
if(ch[]=='Q')printf("%d\n",query(x,y));
else update(x,y);
}
return ;
}

BZOJ2453维护队列&&BZOJ2120数颜色的更多相关文章

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

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

  2. [bzoj2453]维护队列_带修改莫队

    维护队列 bzoj-2453 题目大意:给定一个n个数序列,支持查询区间数的种类数,单点修改.不强制在线. 注释:$1\le n,m\le 10^5$. 想法: 带修改莫队裸题. 如果没有修改操作的话 ...

  3. BZOJ2453: 维护队列

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 183  Solved: 89[Submit][Status] Descripti ...

  4. bzoj2120 数颜色 莫队 带修改

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

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

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

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

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

  7. BZOJ2120 数颜色(树套树)

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

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

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

  9. bzoj2120: 数颜色 &&bzoj2453: 维护队列

    题目大意: 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好 ...

随机推荐

  1. Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……

    接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...

  2. MVC中Action 过滤

    总结Action过滤器实用功能,常用的分为以下两个方面: 1.Action过滤器主要功能就是针对客服端请求过来的对象行为进行过滤,类似于门卫或者保安的职能,通过Action过滤能够避免一些非必要的深层 ...

  3. hdu 1075:What Are You Talking About(字典树,经典题,字典翻译)

    What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K ...

  4. C# IP地址与整数之间的转换

    IP地址与整数之间的转换 1.IP地址转换为整数 原理:IP地址每段可以看成是8位无符号整数即0-255,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个无符号的32位整数. 举例:一 ...

  5. EMC DATA DOMAIN 2200 filesys destroy(數據清空及重建)

    EMC 數據清空 1.數據清空 這裡會清空file system的所有東西包括tapes

  6. Oracle数据库 控制文件

    一.概念控制文件的主要任务是管理数据库的状态以及描述数据库的物理结构 二.所含有的信息1.数据库名2.数据库标识符(DBID)3.数据库创建时间戳4.数据库字符集5.数据文件信息6.临时文件信息7.在 ...

  7. 在ASP.NET 5中如何方便的添加前端库

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:ASP.NET 5和之前的ASP.NET版本有很大的不同,其中之一就是对前端库的管理不再使用Nuget,而 ...

  8. javascript中时间的手动创建date的方式

    new Date("month dd,yyyy hh:mm:ss"); new Date("month dd,yyyy"); new Date(yyyy,mth ...

  9. input按钮上传按钮样式

    主要是定位和不透明度来实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  10. T-SQL Transact-SQL 编程

    T-SQL语句用于管理SQL Server数据库引擎实例,创建和管理数据库对象,以及查询.插入.修改和删除数据. Ø 变量 . 局部变量(Local Variable) 局部变量是用户可以自定义的变量 ...