BZOJ 2120/BZOJ 2453
分块傻逼题。
memset很慢的。。。而且其实也没有用。。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 10050
#define maxm 1000500
using namespace std;
int n,m,col[maxn],pre[maxn],last[maxm],b[maxm],pos[maxn],len,num;
int x,y;
char s[];
void reset(int x)
{
int l=(x-)*len+,r=min(x*len,n);
for (int i=l;i<=r;i++)
b[i]=pre[i];
sort(b+l,b+r+);
}
void build()
{
if (n%len==) num=n/len;
else num=n/len+;
for (int i=;i<=num;i++)
reset(i);
}
void change()
{
scanf("%d%d",&x,&y);
for(int i=;i<=n;i++) last[col[i]]=;
col[x]=y;
for (int i=;i<=n;i++)
{
int regis=pre[i];
pre[i]=last[col[i]];last[col[i]]=i;
if (regis!=pre[i]) reset(pos[i]);
}
}
int find(int pos,int x)
{
int l=(pos-)*len+,r=min(pos*len,n);
int re=l;
while (l<=r)
{
int mid=(l+r)>>;
if (b[mid]<x) l=mid+;
else r=mid-;
}
return l-re;
}
void ask()
{
scanf("%d%d",&x,&y);
int ans=;
if (pos[x]==pos[y])
{
for (int i=x;i<=y;i++)
if (pre[i]<x) ans++;
}
else
{
for (int i=x;i<=pos[x]*len;i++)
if (pre[i]<x) ans++;
for (int i=(pos[y]-)*len+;i<=y;i++)
if (pre[i]<x) ans++;
for (int i=pos[x]+;i<=pos[y]-;i++)
ans+=find(i,x);
}
printf("%d\n",ans);
}
int main()
{
scanf("%d%d",&n,&m);
len=int(sqrt(n)+log(*n)/log());
for (int i=;i<=n;i++)
{
scanf("%d",&col[i]);
pre[i]=last[col[i]];
last[col[i]]=i;
pos[i]=(i-)/len+;
}
build();
for (int i=;i<=m;i++)
{
scanf("%s",s);
if (s[]=='Q') ask();
else change();
}
return ;
}
BZOJ 2120/BZOJ 2453的更多相关文章
- 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)
2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...
- BZOJ 2120 数颜色(带修改的莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 3478 Solved: 1342 [Submit][Status][Discus ...
- Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 2645 Solved: 1039[Submit][Status][Discuss] ...
- Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 578 Solved: 247[Submit][Status][Discuss] ...
- BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3665 Solved: 1422[Submit][Status][Discuss] ...
- 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)
试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- BZOJ 2120: 数颜色
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3623 Solved: 1396[Submit][Status][Discuss] ...
- BZOJ 2120: 数颜色 分块
2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...
- bzoj 2120 带修改莫队
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 7340 Solved: 2982[Submit][Status][Discuss] ...
随机推荐
- poj 3903 Stock Exchange(最长上升子序列,模版题)
题目 #include<stdio.h> //最长上升子序列 nlogn //入口参数:数组名+数组长度,类型不限,结构体类型可以通过重载运算符实现 //数组下标从1号开始. int bs ...
- iOS字符串大小转换
NSString *test = @"Hello World"; // 小写 NSString *lower = [test lowercaseSt ...
- java集合之ArrayList的实现原理
1. ArrayList概述: ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部 ...
- java基础知识回顾之javaIO类---BufferedReader和BufferedWriter
使用了装饰设计模式:此类的设计是为了提高流操作数据的效率.思想就是定义容器将数据进行临时存储,对于缓冲区对象,其实就是将这个容器进行了分装,并提供了更高效的操作方法. BufferReader: pa ...
- Java 序列化的高级认识
序列化 ID 问题 情境:两个客户端 A 和 B 试图通过网络传递对象数据,A 端将对象 C 序列化为二进制数据再传给 B,B 反序列化得到 C. 问题:C 对象的全类路径假设为 com.inout. ...
- 2013 ACM/ICPC Asia Regional Changsha Online - C Color Representation Conversion
这个纯粹是一个细节题啊!!! 由于某个地方的浮点数比较写错了,WA了无数次啊…… 代码如下: #include<iostream> #include<cstdio> #incl ...
- java多线程理解2
1. 什么时候必须同步?什么叫同步?如何同步? 要跨线程维护正确的可见性,只要在几个线程之间共享非 final 变量,就必须使用 synchronized(或 volatile)以确保一个线程可以看见 ...
- Docker搭建MySQL服务
Docker开源镜像 前面我们已经安装好了Docker,也简单了解了Docker.那么我们可以尝试搭建一个MySQL服务. 要搭建服务就要启动服务容器,要创建容易就要有镜像,Docker提供了一个类似 ...
- 淘宝设计师入门:设计师SDK环境配置
把淘宝官方的做法先过一遍:( http://open.taobao.com/doc/detail.htm?id=102527 ) 1.配置JAVA环境http://www.cnblogs.com/ti ...
- 什么是智能dns解析
智能DNS解析是针对目前电信和网通互联互通不畅的问题推出的一种DNS解决方案.具体实现是:把同样的域名如test.winiis.com的A记录分别设置指向网通和电信IP,当网通的客户访问时,智能DNS ...