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. 在python中使用concurrent.futures实现进程池和线程池

    #!/usr/bin/env python # -*- coding: utf-8 -*- import concurrent.futures import time number_list = [1 ...

  2. 数据结构之图 Part2 - 1

    邻接矩阵 网上很少有C# 写图的数据结构的例子,实际的项目中也从来没用过Array 这坨东西,随手写个,勿喷. namespace LH.GraphConsole { public struct Gr ...

  3. PowerDesigner连接Oracle数据库生成数据模型【数据源连接方式】

    1.进入操作系统的管理工具 2.选择ODBC数据源[32位或64位] 3.列表中是当前数据库已有的数据源,右侧点击添加按钮,添加适合自己的数据源 4.在列表中选择索要连接数据库的ODBC驱动[这里我要 ...

  4. Win10 资源文件

    ResourceLoader rl = new ResourceLoader(); DisOutText.Text = rl.GetString("Display"); Resou ...

  5. NDK-gdb

    http://www.gnu.org/software/gdb/download/ http://mhandroid.wordpress.com/2011/01/23/using-eclipse-fo ...

  6. Codeforces Round #333 (Div. 1) D. Acyclic Organic Compounds trie树合并

    D. Acyclic Organic Compounds   You are given a tree T with n vertices (numbered 1 through n) and a l ...

  7. Quick-Cocos2dx 快速了解

    set_dev_envirment // */ // ]]> Cocos2dx快速了解 1. Quick-Cocos2dx 开发环境搭建 1.1. 官网: 1.2. Github: 1.3. s ...

  8. 【T_SQL】基础 续+

    十.模糊查询 1.LIKE --查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中含有这些内容. SELECT StuName AS 姓名 FROM Stuinfo WHERE stuname ...

  9. UVA136 求第1500个丑数

    枚举大范围数据..暴力检查题目条件 #include <iostream> #include <cstdio> #include <vector> #include ...

  10. 滑动listview隐藏和显示顶部布局

    需求: 1.listview向下滑动时,隐藏顶部布局 2.listview向上滑动到最上面,显示顶部布局 3.顶部布局的隐藏和显示有过渡效果 4.第一次加载listview时,顶部不要隐藏 布局: 注 ...