【BZOJ】2453: 维护队列【BZOJ】2120: 数颜色 二分+分块(暴力能A)
先说正解:把所有相同的数相成一个链在每一个区间里的种数就是不同链的链头,那么记录每个数的上个相同数所在位置,那么只要找出l到r之间前驱值在l之前的数的个数就可以了
本人打的暴力,有一个小技巧,用char代替int水题,用int里的值不同来去掉memset
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<cmath>
#include<iostream>
#define MAXN 10100
using namespace std;
char ex[][][];
map<int,int>mp;
int a[MAXN],pos[MAXN],t,len,n,m,sz,f[][],now[];
inline void pre(int x)
{
int ans=;
for(int i=(x-)*len+;i<=n;i++)
{
if(ex[x][pos[i]][a[i]])
{
for(int j=pos[i];j<=t;j++)
ex[x][j][a[i]]++;
continue;
}
for(int j=pos[i];j<=t;j++)
{
ex[x][j][a[i]]=;
f[x][j]++;
}
}
}
inline void work1(int ohou)
{
int l,r;
scanf("%d%d",&l,&r);
int z=pos[l],y=pos[r];
int ans=;
if(pos[r]-pos[l]<=)
{
for(int i=l;i<=r;i++)
{
if(now[a[i]]==ohou)continue;
ans++;
now[a[i]]=ohou;
}
}
else
{
z++,y--;
ans=f[z][y];
int zzh=pos[l]*len;
for(int i=l;i<=zzh;i++)
{
if(now[a[i]]==ohou||ex[z][y][a[i]])continue;
now[a[i]]=ohou;
ans++;
}
for(int i=(pos[r]-)*len+;i<=r;i++)
{
if(now[a[i]]==ohou||ex[z][y][a[i]])continue;
now[a[i]]=ohou;
ans++;
}
}
printf("%d\n",ans);
}
inline void work2()
{
int po,to;
scanf("%d%d",&po,&to);
if(mp[to]==)
mp[to]=++sz;
to=mp[to];
int x0=a[po];
a[po]=to;
int p1=pos[po];
for(int i=p1;i>;i--)
for(int j=p1;j<=t;j++)
{
ex[i][j][x0]--;
if(ex[i][j][x0]==)f[i][j]--;
ex[i][j][to]++;
if(ex[i][j][to]==)f[i][j]++;
}
}
int main()
{
scanf("%d%d",&n,&m);
len=(int)sqrt(n+0.5);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(mp[a[i]]==)
mp[a[i]]=++sz;
a[i]=mp[a[i]];
pos[i]=(i-)/len+;
}
t=pos[n];
for(int i=;i<=t;i++)
pre(i);
while(m--)
{
char s[];
scanf("%s",s);
if(s[]=='Q')work1(m);
else work2();
}
return ;
}
【BZOJ】2453: 维护队列【BZOJ】2120: 数颜色 二分+分块(暴力能A)的更多相关文章
- Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 578 Solved: 247[Submit][Status][Discuss] ...
- bzoj 2453 : 维护队列 带修莫队
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 952 Solved: 432[Submit][Status][Discuss] ...
- bzoj 2453: 维护队列
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1079 Solved: 503[Submit][Status][Discuss ...
- BZOJ 2453 维护队列 | 分块
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题解: 考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候, ...
- BZOJ.2453.维护队列([模板]带修改莫队)
题目链接 带修改莫队: 普通莫队的扩展,依旧从[l,r,t]怎么转移到[l+1,r,t],[l,r+1,t],[l,r,t+1]去考虑 对于当前所在的区间维护一个vis[l~r]=1,在修改值时根据是 ...
- Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 2645 Solved: 1039[Submit][Status][Discuss] ...
- 【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: 数颜色
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3623 Solved: 1396[Submit][Status][Discuss] ...
随机推荐
- jquery 节点
$("ul li:eq(3)") // 元素的index位置工0开始计数,所以这里的3实际为第4个元素 $("ul").find("li" ...
- 深入理解is_callable和method_exists
一.函数解析 is_callable() 定义: (PHP 4 >= 4.0.6, PHP 5, PHP 7) is_callable — 检测参数是否为合法的可调用结构 bool is_cal ...
- python基础知识 -- set集合
Set集合:是Python的一个基本数据类型.一般不是很常用.Set中的元素是不重复的,无序的,里面的元素必须是可hash的(int,str,tuple,bool).我们可以这样来计Set就是dict ...
- Mongoose模式的扩展
模式的扩展 默认值 默认值的类型: 固定值.即使生成 代码展示: var mongoose = require('mongoose');mongoose.connect('mongodb://loca ...
- Spring + MySQL + Mybatis + Redis【二级缓存】
一.Redis环境 Redis 官网 :http://redis.io/ windows下载:https://github.com/dmajkic/redis/downloads 1.文件解压缩 2. ...
- PHP二维数组按某个键值排序
$data=Array( [0] => Array ( [id] => 2 [user_id] => 14 ...
- HDU 4719 Oh My Holy FFF(DP+线段树)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)
Description N soldiers from the famous "*FFF* army" is standing in a line, from left to ri ...
- 安装CentOS 5.x与多重引导小技巧
不建议使用Virtualbox安装Linux来学习!本处是学习在计算机上安装Linux. 但现在条件有限,就先使用Virtualbox练习!
- 数据结构7——DP优化
斜率优化/单调队列优化/四边形优化
- windows下连接hadoop运行eclipse报错Permission denied:
这是权限问题,试了一下同时也不能在hdfs创建文件夹. 解决: 修改如下hadoop的配置文件:etc/hadoop/hdfs-site.xml,如没有的话可以添加上. <property> ...