【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] ...
随机推荐
- 在python中安装basemap
在python中安装basemap 1. 确保python环境安装完毕且已配置好环境变量 2. 安装geos: pip install geos 3. 下载.whl文件: (1)pyproj‑1.9. ...
- Waterline从概念到实操
Waterline基本介绍 Waterline是什么 Waterline是下一代存储和检索引擎,也是Sails框架中使用的默认ORM . ORM的基本概念 Object Relational Mapp ...
- LeetCode算法1—— 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...
- win7 下安装oracle 11g出现错误: 启动服务出现错误 找不到服务OracleMTSRecoveryService
这种错误是在多次安装oracle都没有成功的情况下发生的. 正确安装oracle,是有前提条件的 1,安装最新的jdk,不是jre!!(并配好环境变量,在cmd中测试 java -version与ja ...
- IDEA中SVN的使用
文件红色:表示文件没有添加到服务器 绿色:表示没有更新新的修改到服务器 普通黑色:表示和服务器同步 1.如何让修改的文件的父文件也变成蓝色(未提交的状态) 2.其中的1.6 format 1.7 fo ...
- ora-12154 TNS:"无法处理服务名"的一个解决方法
http://www.cnblogs.com/xh3/archive/2007/04/21/722217.html 很怪异的一个问题,在网络环境下配置客户端,竟然怎么也连不上主机了,看了不少帖子,大多 ...
- 用起来超爽的Maven——进阶篇
以后随着使用的maven的频率增加,此文件会越来越大,也是为什么需要把默认C:\Users\Administrator\.m2 \repository目录改变为D:/OpenSources/repos ...
- 对工具的反思 & deadlines与致歉
人和动物最大的区别就是使用工具的水平. 有些人只凭着对工具的熟练掌握便成了牛人. 工具,到底应该以何种态度去看待? 在我小的时候,工具仅仅是指树枝.线.粉笔,可以让自己有更多游戏可玩:上学之后,便又有 ...
- vue之vue-cookies使用
一.安装vue-cookies npm install --save vue-cookies 或者 yarn add vue-cookies 二.引入vue-cookie // 方式一:require ...
- Linux-获得命令帮助man
date:显示当前系统时间,修改时间 clock,hwclock:显示硬件时间 cal:calendar,查看日历 计时器靠晶体振荡器来完成计时 Linux: 实时时钟,rtc,real time c ...