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有时候会依据个人喜好 ...
随机推荐
- Delphi中record和packed record的区别
转载:http://blog.csdn.net/rznice/article/details/6566978 第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐. 而第二种带packe ...
- url地址中 "&" "/"等符号的转义处理(转)
URL出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好? 解决办法:将这些字符转化成服务器可以识别的字符,对应关系如下: URL中的特殊字 ...
- Android开发学习笔记:浅谈WebView(转)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...
- HDU 5791 Two DP
Two Problem Description Alice gets two sequences A and B. A easy problem comes. How many pair of ...
- loj 1357(树形dp)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1357 #define _CRT_SECURE_NO_WARNINGS #include ...
- python客户端编程
上一篇说了最为底层的用来网络通讯的套接字.有很多基于套接字的一些协议,这些协议构成了当今互联网大多数客户服务器应用的核心 其实这些协议时在套接字上面的进一层封装用来完成特定的应用,这些应用主要包括: ...
- 驱动中获取PsActiveProcessHead变量地址的五种方法也可以获取KdpDebuggerDataListHead
PsActiveProcessHead的定义: 在windows系统中,所有的活动进程都是连在一起的,构成一个双链表,表头是全局变量PsActiveProcessHead,当一个进程被创建时,其Act ...
- java Clone使用方法详解
java"指针" Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念.并且由于Java不能 通过 ...
- 编解码-protobuf
Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,Protobuf的优点. (1)在谷歌内部长期使用,产品成熟度高: (2)跨语言,支持多种语言,包括C++ ...
- AngularJS学习之输入验证
1.AngularJS可以验证表单和控件可以验证输入的数据: 2.输入验证:客户端不能确保用户输入数据的安全,所以服务器端的数据验证也是必须的: 3.应用实例: <! DOCTYPE html& ...