题目描述

墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令:

1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。

2、 R P Col 把第P支画笔替换为颜色Col。

为了满足墨墨的要求,你知道你需要干什么了吗?

输入输出格式

输入格式:

第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。

第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。

第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。

输出格式:

对于每一个Query的询问,你需要在对应的行中给出一个数字,代表第L支画笔到第R支画笔中共有几种不同颜色的画笔。

输入输出样例

输入样例#1:

6 5
1 2 3 4 5 5
Q 1 4
Q 2 6
R 1 2
Q 1 4
Q 2 6
输出样例#1:

4
4
3
4

说明

对于100%的数据,N≤10000,M≤10000,修改操作不多于1000次,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。

来源:bzoj2120

本题数据为洛谷自造数据,使用CYaRon耗时5分钟完成数据制作。

莫队入门中。。(省略号是动态的)

屠龙宝刀点击就送

#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#define N 1000500
using namespace std;
struct node
{
int l,r,id,bel,tim,ans;
}s[N];
bool cmp(node a,node b)
{
if(a.bel==b.bel) return a.r<b.r;
else return a.bel<b.bel;
}
bool comp(node a,node b)
{
return a.id<b.id;
}
struct nodee
{
int bef,aft,pos;
}ss[N];
int C,n,m,col[N],tot,now,ans,sum[N];
void update(int x,int y)
{
sum[x]+=y;
if(y==&&sum[x]==) ans++;
else if(y==-&&!sum[x]) ans--;
}
int Main()
{
scanf("%d%d",&n,&m);
C=(int)sqrt((double)n);
for(int i=;i<=n;++i) scanf("%d",&col[i]);
char opt[];
for(int x,y;m--;)
{
scanf("%s%d%d",opt,&x,&y);
if(opt[]=='Q')
{
s[++tot].l=x;
s[tot].r=y;
s[tot].bel=(x-)/C+;
s[tot].tim=now;
s[tot].id=tot;
}
else if(opt[]=='R')
{
ss[++now].pos=x;
ss[now].aft=y;
}
}
now=;
sort(s+,s++tot,cmp);
for(int L=,R=,i=;i<=tot;++i)
{
while(now<s[i].tim)
{
now++;
ss[now].bef=col[ss[now].pos];
if(ss[now].pos<=R&&ss[now].pos>=L)
{
update(ss[now].bef,-);
update(ss[now].aft,);
}
col[ss[now].pos]=ss[now].aft;
}
while(now>s[i].tim)
{
if(ss[now].pos<=R&&ss[now].pos>=L)
{
update(ss[now].aft,-);
update(ss[now].bef,);
}
col[ss[now].pos]=ss[now].bef;
now--;
}
while(L<s[i].l) update(col[L++],-);
while(L>s[i].l) update(col[--L],);
while(R<s[i].r) update(col[++R],);
while(R>s[i].r) update(col[R--],-);
s[i].ans=ans;
}
sort(s+,s++tot,comp);
for(int i=;i<=tot;++i) printf("%d\n",s[i].ans);
return ;
}
int sb=Main();
int main(int argc,char *argv[]){;}

洛谷 P1903 【模板】分块/带修改莫队(数颜色)的更多相关文章

  1. AC日记——【模板】分块/带修改莫队(数颜色) 洛谷 P1903

    [模板]分块/带修改莫队(数颜色) 思路: 带修改莫队: (伏地膜xxy): 代码: #include <bits/stdc++.h> using namespace std; #defi ...

  2. 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)

    莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...

  3. 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法

    [题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...

  4. 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法

    [题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...

  5. 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)

    试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...

  6. P1903 【模板】分块/带修改莫队(数颜色)

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

  7. luogu1903 【模板】分块/带修改莫队(数颜色)

    莫队算法模板 推荐阅读这篇博客 #include <algorithm> #include <iostream> #include <cstdio> #includ ...

  8. BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]

    BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...

  9. 【Luogu】P1903数颜色(带修改莫队)

    题目链接 带修改莫队模板. 加一个变量记录现在是第几次修改,看看当前枚举的询问是第几次修改,改少了就改过去,改多了就改回来. 话说我栈用成队列了能过样例?!!!! 从此深信一句话:样例是出题人精心设计 ...

随机推荐

  1. OpenType字体与TrueType字体的区别

    TrueType采用几何学中二次B样条曲线及直线来描述字体的外形轮廓,其特点是:TrueType既可以作打印字体,又可以用作屏幕显示:由于它是由指令对字形进行描述,因此它与分辨率无关,输出时总是按照打 ...

  2. [yii]Trying to get property of non-object

    今天接触gridview的时候,发现总是报错,如图. array( 'name'=>'user_info.userinfo', 'value'=>'$data->user_info- ...

  3. 2、Python IDLE入门

    转载:http://www.cnblogs.com/dsky/archive/2012/06/04/2535397.html 1.IDLE是Python软件包自带的一个集成开发环境,初学者可以利用它方 ...

  4. Matcher的replaceAll ()/appendReplacement()/appendTail()详细举例

    直接上例子: package com.dajiangtai.djt_spider.util; import java.util.regex.Matcher;import java.util.regex ...

  5. 699. Falling Squares

    On an infinite number line (x-axis), we drop given squares in the order they are given. The i-th squ ...

  6. [poj] Dungeon Master bfs

    Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...

  7. ue4 简单数据储存

  8. Unite Europe案例项目《影子战术》层级优化经验分享

    http://forum.china.unity3d.com/thread-25087-1-9.html 在Unite Europe 2017的Keynote主题演讲中,我们为大家分享了将主机游戏&l ...

  9. vector详解

    /*vector向量容器*/ //用数组方式访问vector元素 #include<iostream> #include<vector> #include<cstdio& ...

  10. django中的ORM与 应用与补充

    目录 django中的ORM与 应用与补充 ORM与数据的对应关系 ORM 常用字段 ORM 其他字段 自定义字段 字段参数 Model Meta参数 常用13中查询(必会) 单表查询的双下划线应用 ...