先说正解:把所有相同的数相成一个链在每一个区间里的种数就是不同链的链头,那么记录每个数的上个相同数所在位置,那么只要找出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)的更多相关文章

  1. Bzoj 2453: 维护队列 && Bzoj 2120: 数颜色 分块,bitset

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 578  Solved: 247[Submit][Status][Discuss] ...

  2. bzoj 2453 : 维护队列 带修莫队

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 952  Solved: 432[Submit][Status][Discuss] ...

  3. bzoj 2453: 维护队列

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1079  Solved: 503[Submit][Status][Discuss ...

  4. BZOJ 2453 维护队列 | 分块

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题解: 考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候, ...

  5. BZOJ.2453.维护队列([模板]带修改莫队)

    题目链接 带修改莫队: 普通莫队的扩展,依旧从[l,r,t]怎么转移到[l+1,r,t],[l,r+1,t],[l,r,t+1]去考虑 对于当前所在的区间维护一个vis[l~r]=1,在修改值时根据是 ...

  6. Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 2645  Solved: 1039[Submit][Status][Discuss] ...

  7. 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)

    2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...

  8. BZOJ 2120 数颜色(带修改的莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 3478  Solved: 1342 [Submit][Status][Discus ...

  9. BZOJ 2120: 数颜色

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 3623  Solved: 1396[Submit][Status][Discuss] ...

随机推荐

  1. 基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(二)之cdev与read、write

    基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(二)之cdev与read.write 0. 导语 在上一篇博客里面,基于OMAPL138的字符驱动_GPIO驱动AD9833(一)之 ...

  2. 转:python教程专题资源免费下载整理合集收藏

    python教程专题资源免费下载整理合集收藏 < Python学习手册(第4版)>(Learning Python, 4th Edition)[PDF] 94MB 简体中文 <Pyt ...

  3. python 字符串输入、输出函数print input raw_input

    一.输出print print输出是以不带引号的输出.(用户所见的输出) 二.input()  和  raw_input()输入函数 raw_input()会把输入数据转换成字符串形式: ------ ...

  4. LINQ查询操作符

    ·First - 返回集合中的第一个元素:不延迟 ·FirstOrDefault - 返回集合中的第一个元素(如果没有则返回默认值):不延迟 ·Last - 返回集合中的最后一个元素:不延迟 ·Las ...

  5. 7.Mongodb复制(副本集)

    1.复制 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾难恢复 ...

  6. 实用脚本 1 -- 安装Ctags

    Ctags是vim下方便代码阅读的工具,一般VIM中已经默认安装了Ctags,它可以帮助程序员很容易地浏览源代码. 1.如果系统中没有此工具用如下方法安装:    到ctags官网下载源码,解压后   ...

  7. 完整的vue+vuex+api-router+database请求流程

  8. java设计模式大全 Design pattern samples in Java(最经典最全的资料)

    java设计模式大全 Design pattern samples in Java(最经典最全的资料) 2015年06月19日 13:10:58 阅读数:11100 Design pattern sa ...

  9. 【C#】 语法糖

    [C#] 语法糖 一, 扩展方法 1. 对某个类功能上的扩展 2. 特点: 使用方便,可以在不修改原代码的基础上进行扩展. 参照 linq,linq 就是一系列的扩展方法 3. 语法: 非泛型静态类, ...

  10. 解析车辆VIN码识别(车架号识别)系统

    很多人在购买车辆的时候,只关注性能.外观.内饰等,其实真正的内行是首先看车辆的VIN码,也叫车架号码. VIN码(车架号码)是一辆车的唯一身份证明,一般在车辆的挡风玻璃处,有的在车辆防火墙上,或B柱铭 ...