BZOJ2453维护队列&&BZOJ2120数颜色
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数颜色的更多相关文章
- BZOJ2120 数颜色 【带修莫队】
BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...
- [bzoj2453]维护队列_带修改莫队
维护队列 bzoj-2453 题目大意:给定一个n个数序列,支持查询区间数的种类数,单点修改.不强制在线. 注释:$1\le n,m\le 10^5$. 想法: 带修改莫队裸题. 如果没有修改操作的话 ...
- BZOJ2453: 维护队列
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 183 Solved: 89[Submit][Status] Descripti ...
- bzoj2120 数颜色 莫队 带修改
[bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- BZOJ2120 数颜色 【带修改莫队】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 6579 Solved: 2625 [Submit][Status][Discus ...
- BZOJ2120 数颜色 —— 待修改莫队
题目链接:https://vjudge.net/problem/HYSBZ-2120 2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: ...
- BZOJ2120 数颜色(树套树)
B. 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令:1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色 ...
- [Bzoj2120]数颜色 (非正解 )(莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6286 Solved: 2489[Submit][Status][Discuss] ...
- bzoj2120: 数颜色 &&bzoj2453: 维护队列
题目大意: 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好 ...
随机推荐
- soapUI 使用Property
DRY 原则是一个比较普适的东西,在使用soapUI测试的时候,为了make life easy,我们必须要使用Property来集中化一些设置. 比如说从dev->test->uat 的 ...
- JavaScript - 变量,作用域,内存
JavaScript 变量可以用来保存两种类型的值:基本类型值和应用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Bollean.Number和String. 所有变量都 ...
- PHP导出Excel一个方法轻松搞定
/** * 导出数据为excel表格 *@param $data 一个二维数组,结构如同从数据库查出来的数组 *@param $title excel的第一行标题,一个数组,如果为空则没有标题 *@p ...
- VMware报错:“device eth0 does not seem to be present, delaying initialization ”
转自:http://blog.sina.com.cn/s/blog_77126fa501018s3d.html vmlite虚拟机启动出错,就把这个虚拟机删除掉重新建立,系统虚拟硬盘使用之前的,启动系 ...
- 为GDI函数增加透明度处理
用户对客户端的UI的要求越来越高,采用alpha通道对前景背景做混合是提高UI质量的重要手段. UI开发离不开GDI,然后要用传统的GDI函数来处理alpha通道通常是一个恶梦:虽然有AlphaBle ...
- JavaScript中new和this
[TOC] new var obj = new Base(); 相当于: var obj = {}; //创建空对象obj obj.__proto__ = Base.prototype; //将空对象 ...
- Intent传递类实例
发送方: Intent intent = new Intent(); intent.setClass(mContext, HomeDetailReportActivity.class); intent ...
- 退出Activity(转)
退出Activity 如何退出Activity?如何安全退出已调用多个Activity的Application? 退出activity 直接调用 finish () 方法 . //用户点击back键 ...
- 【微信Java开发 --1---番外1】在windows下,使用JAVA执行多条DOS命令+文件夹/路径中有空格怎么解决【目的是实现内容穿透外网】
内网穿透外网的那一篇,参正集1 但是每次都要Ctrl+R 启动DOS窗口,也就是CMD,一句一句的去粘,略显繁琐. 所以将这些任务写在JAVA程序中,启动一次程序就可以实现[内网穿透]的功能,多好啊! ...
- 从两个平方算法到分治算法-java
先来看看问题的来源,假设有这么一个数组: 1 2 -5 4 -2 3 -3 4 -15 我们要求出其中连续字数组的和的最大值 例如这么可以很明显看出 4+ –2 + 3 + –3 + 4 = 6 所有 ...