BZOJ2453: 维护队列
2453: 维护队列
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 183 Solved: 89
[Submit][Status]
Description
Input
Output
Sample Input
1 2
Q 1 2
R 1 2
Q 1 2
Sample Output
1
HINT
对于100%的数据,有1 ≤ N ≤ 10000, 1 ≤ M ≤ 10000,小朋友A不会修改超过1000次,所有颜色均用1到10^6的整数表示。
Source
用pre[i]记录前一个和i相同颜色的球的所在位置
询问l到r时,如果pre[i]<r说明在l到i这一段没用和i颜色相同的球,则ans++
利用这种思路我们可以。。。分块
每一块内按pre[i]排序,然后和教主的魔法那题都一样了
-----hzwer
代码:
- #include<cstdio>
- #include<cstdlib>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- #include<iostream>
- #include<vector>
- #include<map>
- #include<set>
- #include<queue>
- #include<string>
- #define inf 1000000000
- #define maxn 10000+1000
- #define maxm 1000000+1000
- #define eps 1e-10
- #define ll long long
- #define pa pair<int,int>
- using namespace std;
- inline 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 n,m,block,b[maxn],c[maxn],pre[maxn],pos[maxn],last[maxm];
- void reset(int x)
- {
- int l=(x-)*block+,r=min(x*block,n);
- for(int i=l;i<=r;i++)pre[i]=b[i];
- sort(pre+l,pre+r+);
- }
- int find(int x,int y)
- {
- int l=(x-)*block+,r=x*block,mid;
- while(l<=r)
- {
- mid=(l+r)>>;
- if(pre[mid]>=y)r=mid-;else l=mid+;
- }
- return l-(x-)*block-;
- }
- int query(int x,int y)
- {
- int sum=,bx=pos[x],by=pos[y];
- if(by-bx<=)
- {
- for(int i=x;i<=y;i++)if(b[i]<x)sum++;
- }
- else
- {
- for(int i=x;i<=bx*block;i++)if(b[i]<x)sum++;
- for(int i=(by-)*block+;i<=y;i++)if(b[i]<x)sum++;
- }
- for(int i=bx+;i<by;i++)sum+=find(i,x);
- return sum;
- }
- void change(int x,int y)
- {
- for(int i=;i<=n;i++)last[c[i]]=;
- c[x]=y;
- for(int i=;i<=n;i++)
- {
- int t=b[i];
- b[i]=last[c[i]];
- last[c[i]]=i;
- if(t!=b[i])reset(pos[i]);
- }
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- n=read();m=read();
- block=floor(sqrt(n));
- for(int i=;i<=n;i++)
- {
- c[i]=read();
- pos[i]=(i-)/block+;
- b[i]=last[c[i]];
- last[c[i]]=i;
- }
- for(int i=;i<=pos[n];i++)reset(i);
- char ch;int x,y;
- while(m--)
- {
- ch=' ';
- while(ch!='Q'&&ch!='R')ch=getchar();x=read();y=read();
- if(ch=='R')change(x,y);else printf("%d\n",query(x,y));
- }
- return ;
- }
BZOJ2453: 维护队列的更多相关文章
- [bzoj2453]维护队列_带修改莫队
维护队列 bzoj-2453 题目大意:给定一个n个数序列,支持查询区间数的种类数,单点修改.不强制在线. 注释:$1\le n,m\le 10^5$. 想法: 带修改莫队裸题. 如果没有修改操作的话 ...
- [BZOJ2453]维护队列|分块
Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...
- BZOJ2453维护队列&&BZOJ2120数颜色
2016-05-28 11:20:22 共同的思路: 维护某种颜色上一次在哪里出现pre,可以知道当pre<询问的l时更新答案 块内按照pre排序 修改的时候重新O(n)扫一遍,如果和之前的不一 ...
- bzoj2120: 数颜色 &&bzoj2453: 维护队列
题目大意: 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好 ...
- 【分块】bzoj2453 维护队列
http://www.cnblogs.com/autsky-jadek/p/4020296.html 同bzoj2120. #include<cstdio> #include<cma ...
- [BZOJ2120] 数颜色 && [bzoj2453] 维护队列(莫队 || 分块)
传送门 只有第一个,第二个权限题. 分块,然而wa,没看出来错在哪里,有时间再看. #include <cmath> #include <cstdio> #include &l ...
- 【BZOJ2453】维护队列/【BZOJ2120】数颜色 分块
[BZOJ2453]维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色 ...
- 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 653 Solved: 283[Submit][Status][Discuss] ...
- 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...
随机推荐
- c# 根据自定义Attribute排序
add a class: public class ExportAttribute : Attribute { public int FieldOrder { get; set; } ...
- Transact-SQL 数据类型转换
Syntax Syntax for CAST: CAST ( expression AS data_type [ ( length ) ] ) Syntax for CONVERT: CO ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- 杭电 2047 阿牛的EOF牛肉串 (递推)
阿牛的EOF牛肉串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 【剑指offer】链表倒数第k个节点
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25662121 在Cracking the Code Interview上做过了一次,这次在 ...
- RHEL7查看网卡配置命令ip addr show
Validating Network Address Configuration To verify the configuration of the network address, you nee ...
- (转)C#读取文件路径
//获取包含清单的已加载文件的路径或 UNC 位置. public static string sApplicationPath = Assembly.GetExecutingAssembly ( ) ...
- smokeping报错Can't locate RRDs.pm in @INC (@INC contains
安装完smokeping,执行debug语句: ./bin/smokeping --debug-daemon ,提示如下错误: Can't locate RRDs.pm in @INC (@INC c ...
- CAGradientLayer实现色差动画
效果图: 代码部分: RPGradientAnimationView.h #import <UIKit/UIKit.h> typedef enum : NSUInteger { RPGra ...
- C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结
我们在编程过程中,会涉及到表格数据的显示,存储等,就可能涉及到DataGridView,DataSource, DataTable等概念. 下面我就我自己模糊的一些知识点串讲以下: 1)首先我要讲的是 ...