#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x7fffffff;
int n, m, pos[maxn], s[], c[maxn], ans, t[maxn];
int qsz, csz;
struct node
{
int l, r, t, id, res;
}Node[maxn]; void add(int l, int r, int t, int id)
{
Node[id].l = l;
Node[id].r = r;
Node[id].t = t;
Node[id].id = id;
}
int l = , r = , T = ;
struct change
{
int pos, Old, New;
}Cha[maxn]; void add_(int pos, int New, int Old, int cnt)
{
Cha[cnt].pos = pos;
Cha[cnt].New = New;
Cha[cnt].Old = Old;
} bool cmp(node a, node b)
{
if(pos[a.l] == pos[b.l])
{
if(pos[a.r] == pos[b.r])
return a.t < b.t;
return pos[a.r] < pos[b.r];
}
return pos[a.l] < pos[b.l];
} bool cmp_id(node a, node b)
{
return a.id < b.id;
} void ad(int val)
{
s[val]++;
if(s[val] == )
ans++;
} void de(int val)
{
s[val]--;
// cout<< ans <<endl;
if(s[val] == )
ans--;
} void go(int idx, int val)
{
if(l <= idx && idx <= r)
{
de(c[idx]);
ad(val);
}
c[idx] = val;
} int main()
{
qsz = csz = ;
ans = ;
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++)
{
scanf("%d", &c[i]);
t[i] = c[i];
}
int block = pow(n, 2.0/);
for(int i=; i<=n; i++)
pos[i] = (i-)/block + ;
for(int i=; i<=m; i++)
{
char str[];
int x, y;
scanf("%s%d%d", str, &x, &y);
if(str[] == 'Q')
{
add(++x, y, csz, ++qsz);
}
else
{
add_(++x, y, t[x], ++csz);
t[x] = y;
}
}
sort(Node+, Node++qsz, cmp);
// for(int i=1; i<=qsz; i++)
// cout<< Node[i].l << " " << Node[i].r << endl;
for(int i=; i<=qsz; i++)
{
for(; T < Node[i].t; T++)
go(Cha[T+].pos, Cha[T+].New);
for(; T > Node[i].t; T--)
go(Cha[T].pos, Cha[T].Old); for(; r < Node[i].r; r++)
ad(c[r+]);
for(; r > Node[i].r; r--)
de(c[r]);
for(; l < Node[i].r; l++)
de(c[l]);
for(; l > Node[i].l; l--)
ad(c[l-]);
// for(; T < Node[i].t; T++)
// go(Cha[T+1].pos, Cha[T+1].New);
// for(; T > Node[i].t; T--)
// go(Cha[T].pos, Cha[T].Old); Node[i].res = ans;
}
sort(Node+, Node+qsz+, cmp_id);
for(int i=; i<=qsz; i++)
printf("%d\n",Node[i].res); return ;
}

(待修莫队 没过! 抽空在检查)Dynamic len(set(a[L:R])) UVA - 12345的更多相关文章

  1. P1903 [国家集训队]数颜色 / 维护队列(带修莫队)

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

  2. BZOJ 4129 Haruna’s Breakfast ( 树上带修莫队 )

    题面 求树上某路径上最小的没出现过的权值,有单点修改 添加链接描述 分析 树上带修莫队板题,问题是怎么求最小的没出现过的权值. 因为只有nnn个点,所以没出现过的最小值一定在[0,n][0,n][0, ...

  3. BZOJ 3052/Luogu P4074 [wc2013]糖果公园 (树上带修莫队)

    题面 中文题面,难得解释了 BZOJ传送门 Luogu传送门 分析 树上带修莫队板子题... 开始没给分块大小赋初值T了好一会... CODE #include <bits/stdc++.h&g ...

  4. LUOGU P4074 [WC2013]糖果公园 (树上带修莫队)

    传送门 解题思路 树上带修莫队,搞了两天..终于开O2+卡常大法贴边过了...bzoj上跑了183s..其实就是把树上莫队和带修莫队结合到一起,首先求出括号序,就是进一次出一次那种的,然后如果求两个点 ...

  5. P5168 xtq玩魔塔 [克鲁斯卡尔重构树+带修莫队]

    P5168 xtq玩魔塔 又是码农题- 利用克鲁斯卡尔重构树的性质 我们就可以得出 \(dep\) 值小的,肯定比 \(dep\) 大的值要优. 于是第二问就可以直接 LCA 求出来了- 至于第三问, ...

  6. CF940F Machine Learning(带修莫队)

    首先显然应该把数组离散化,然后发现是个带修莫队裸题,但是求mex比较讨厌,怎么办?其实可以这样求:记录每个数出现的次数,以及出现次数的出现次数.至于求mex,直接暴力扫最小的出现次数的出现次数为0的正 ...

  7. 【BZOJ-3052】糖果公园 树上带修莫队算法

    3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status] ...

  8. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  9. BZOJ2120 数颜色 莫队 带修莫队

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 ...

随机推荐

  1. Xming 多屏选项

    最早接触xming是从GrADS软件弹出的那个窗口开始的.到后来发现它是一个显示图形界面的软件,设置multiwindow 选项,xshell+xming连远程服务器,屡试不爽.随着设备升级,用上了双 ...

  2. Quartz.net 定时任务在IIS中没有定时执行

    问题:Quartz.net 定时任务在项目部署到IIS中发现没有定时执行 解决方案: 1.在服务器上装一个360(自带自动刷新功能),在工具——>自动刷新——>自动刷新勾上 然后再设置一下 ...

  3. c#随机生成中文姓名

    为什么要自己写这个生成器呢?大家应该都有过为测试数据发愁的时候,我就是出于这样的原因. 尽管本次代码很少,但是还会有后续的生成器分享出来. 我代码底子还不是很好,希望各位同道能够发表意见,同是也欢迎大 ...

  4. CF 675E Trains and Statistic

    草稿和一些题解而已 因为指针太恶心了 所以query决定还是要试试自己yy一下 #include<cstdio> #include<cstring> #include<i ...

  5. java web 3.1-web.xml文件配置

    <?xml version="1.0" encoding="UTF-8" ?> <web-app xmlns:xsi="http:/ ...

  6. numastat命令详解

    基础命令学习目录 作者:[吴业亮]博客:http://blog.csdn.net/wylfengyujiancheng一.系统架构的演进从SMP到NUMA1.SMP(Symmetric Multi-P ...

  7. PSP总结报告1

    回答作业问题 1.回想一下你曾经对计算机专业的畅想 我高考后报考的是计算机科学与技术,当时对计算机技术基本了解为零,当时以为什么东西都会用到计算机,学计算机以后不会找不到工作,刚开学的时候对计算机一窍 ...

  8. Beta发布文案+美工

    团队名称:探路者 1蔺依铭:http://www.cnblogs.com/linym762/(组长) 2张恩聚:http://www.cnblogs.com/zej87/ 3米赫:http://www ...

  9. Linux 下软件安装

    Linux 下软件安装 一.Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式: 在线安装 从磁盘安装deb软件包 从二进制软件包安装 从源代码编译安装 这几种安装方式各有优劣,而 ...

  10. C++:内存分区

    前言:最近正在学习有关static的知识,发觉对C++的内存分区不是很了解,上网查了很多资料,遂将这几天的学习笔记进行了简单整理,发表在这里 • 栈区(stack):主要用来存放函数的参数以及局部变量 ...