题目大意:

    你小时候玩过弹珠吗?
    小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N。为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少。当然,A有时候会依据个人喜好,替换队列中某个弹珠的颜色。             但是A还没有学过编程,且觉得头脑风暴太浪费脑力了,所以向你来寻求帮助。
题解:莫队或者分块
代码:

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define maxn 1000500
using namespace std;
int n,m,blo,num,q;
int pre[maxn],c[maxn],b[maxn],last[maxn],pos[maxn];
int read()
{
int x=; char ch; bool bo=;
while (ch=getchar(),ch<''||ch>'') if (ch=='-') bo=;
while (x=x*+ch-'',ch=getchar(),ch>=''&&ch<='');
if (bo) return -x; return x;
}
void resort(int x)
{
int l=(x-)*blo+,r=min(x*blo,n);
for (int i=l; i<=r; i++) pre[i]=b[i];
sort(pre+l,pre+r+);
}
int find(int x,int val)
{
int l=blo*(x-)+,r=min(blo*x,n); int first=l;
while (l<=r)
{
int mid=(l+r)>>;
if (pre[mid]<val) l=mid+;
else r=mid-;
}
return l-first;
}
int ask(int l,int r)
{
int sum=;
if (pos[l]==pos[r])
{
for (int i=l; i<=r; i++) if (b[i]<l) sum++;
}
else
{
for (int i=l; i<=pos[l]*blo; i++) if (b[i]<l) sum++;
for (int i=r; i>=(pos[r]-)*blo+; i--) if (b[i]<l) sum++;
}
for (int i=pos[l]+; i<pos[r]; i++) sum+=find(i,l);
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]) resort(pos[i]);
}
}
void init()
{
n=read(); q=read();
blo=((int)sqrt(n));
for (int i=; i<=n; i++) c[i]=read(),pos[i]=(i-)/blo+;
for (int i=; i<=n; i++)
{
b[i]=last[c[i]];
last[c[i]]=i;
}
num=(n-)/blo+;
for (int i=; i<=num; i++) resort(i);
}
void solve()
{
char ch[]; int x,y;
for (int i=; i<=q; i++)
{
scanf(" %s",ch+); x=read(); y=read();
if (ch[]=='Q') printf("%d\n",ask(x,y));
else change(x,y);
}
}
int main()
{
init();
solve();
}

bzoj2120: 数颜色 &&bzoj2453: 维护队列的更多相关文章

  1. [BZOJ2120] 数颜色 && [bzoj2453] 维护队列(莫队 || 分块)

    传送门 只有第一个,第二个权限题. 分块,然而wa,没看出来错在哪里,有时间再看. #include <cmath> #include <cstdio> #include &l ...

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

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

  3. BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】

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

  4. Luogu P1903 [国家集训队]数颜色 or 维护队列

    标准的带修莫队...咕到了现在$qwq$ 莫队是对询问排序来优化复杂度的(不带修就是对询问区间$[l,r]$排序).. 那么现在带修了,我们再可以维护一个时间维度$tm$:对于每个询问,每次回答前先检 ...

  5. BZOJ2120 数颜色 【带修莫队】

    BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...

  6. [bzoj2453]维护队列_带修改莫队

    维护队列 bzoj-2453 题目大意:给定一个n个数序列,支持查询区间数的种类数,单点修改.不强制在线. 注释:$1\le n,m\le 10^5$. 想法: 带修改莫队裸题. 如果没有修改操作的话 ...

  7. BZOJ2453: 维护队列

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 183  Solved: 89[Submit][Status] Descripti ...

  8. bzoj2120 数颜色 莫队 带修改

    [bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...

  9. BZOJ2120 数颜色 【带修改莫队】

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

随机推荐

  1. EM阅读资料

    1,从最大似然到EM算法浅解 2,(EM算法)The EM Algorithm 3,数据挖掘十大算法----EM算法(最大期望算法) (番外)最大后验估计(MAP)

  2. 关于jdk环境变量配置成了1.6.0_39 32位jdk 的路径 cmd中java -version却还是显示 64位或者其他jdk 路径的解决方法

    其实是c盘或者其他盘的 jdk 安装的太多了,把其他的都卸载掉就行了

  3. HDU 1166 敌兵布阵(树状数组)

    之前用过了线段树的做法,树状数组的也补上吧 #include<iostream> #include<cstdio> #include<cstring> using ...

  4. c#中控制不能从一个case标签贯穿到另一个case标签

    每个非空的case标签都得以break结束,肯定是两个case之间少了一个break了

  5. VS2015安装提示出现“安装包丢失或损坏”解决方法

    原因:microsoft root certificate authority 2010.microsoft root certificate authority 2011证书未安装,导致文件校验未通 ...

  6. Codeforces Round #369 (Div. 2) D. Directed Roads (DFS)

    D. Directed Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  7. CodeForces 605A Sorting Railway Cars

    求一下最长数字连续上升的子序列长度,n-长度就是答案 O(n)可以出解,dp[i]=dp[i-1]+1,然后找到dp数组最大的值. #include<cstdio> #include< ...

  8. 酷炫的方块状散点3D

    http://threejs.org/examples/webgl_particles_random.html

  9. Struts2 JSP中将list,set ,Map传递到Action然后遍历(三十五) - 雲淡風輕 - ITeye技术网站

    1.使用Strut2的的集合对象:在jsp初始化action中的list然后提交到action2.使用Struts标签,实现多个用户同时注册(注意属性配置文件)3.pojo package com.s ...

  10. vim vimgdb reg 编译安装

    在各种无法忍受下,还是决心自己编译安装一个vim.由于vimgdb for 7.3的patch一直有点问题,因此还是选择了vim7.2做为编译安装的版本.(1)获取vim7.2: http://www ...