洛谷 P1903 [国家集训队]数颜色
题意简述
给定一个数列,支持两个操作
1.询问l~r有多少不同数字
2.修改某个数字
题解思路
带修莫队
如果修改多了,撤销修改
如果修改少了,进行修改
代码
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
struct Query
{
int l, r, t, i;
} qu[51000];
struct Modify
{
int p, col;
} mo[51000];
int n, m, cnt1, cnt2, len, s, l = 1, r, t;
int a[51000], c[1001000], ans[51000], tti[51000];
char opt;
bool cmp(const Query &x, const Query &y)
{
if (x.l / len != y.l / len) return x.l / len < y.l / len;
if (x.r / len != y.r / len) return x.r / len < y.r / len;
return x.t < y.t;
}
void add(int x) {s += !(c[x]++); }
void del(int x) {s -= !(--c[x]); }
void replace(int x)
{
int xx = mo[tti[t]].p;
if (xx >= l && xx <= r)
{
s -= !(--c[a[mo[tti[t]].p]]);
s += !(c[mo[tti[t]].col]++);
}
swap(a[mo[tti[t]].p], mo[tti[t]].col);
}
int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
for (register int i = 1; i <= n; ++i) cin >> a[i];
for (register int i = 1; i <= m; ++i)
{
cin >> opt;
if (opt == 'Q')
{
++cnt1;
cin >> qu[cnt1].l >> qu[cnt1].r;
qu[cnt1].t = i;
qu[cnt1].i = cnt1;
}
else
{
++cnt2;
cin >> mo[cnt2].p >> mo[cnt2].col;
tti[i] = cnt2;
}
}
len = n * pow(cnt2, 1.0 / 3);
len = pow(n, 2.0 / 3);
sort(qu + 1, qu + cnt1 + 1, cmp);
for (register int i = 1; i <= cnt1; ++i)
{
while (l > qu[i].l) add(a[--l]);
while (r < qu[i].r) add(a[++r]);
while (l < qu[i].l) del(a[l++]);
while (r > qu[i].r) del(a[r--]);
while (t < qu[i].t) if (tti[++t]) replace(t);
while (t > qu[i].t) if (tti[--t]) replace(t);
ans[qu[i].i] = s;
}
for (register int i = 1; i <= cnt1; ++i) cout << ans[i] << endl;
}
洛谷 P1903 [国家集训队]数颜色的更多相关文章
- 洛谷 P1903 [国家集训队]数颜色 解题报告
P1903 [国家集训队]数颜色 题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1.Q L R代表询问你从第\(L\) ...
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- ●洛谷P1903 [国家集训队]数颜色
题链: https://www.luogu.org/problemnew/show/P1903题解: 序列带修莫队, 推荐博客https://www.cnblogs.com/Paul-Guderian ...
- 洛谷 P1903 [国家集训队]数颜色 / 维护队列
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. \(Q\) \(L\) \(R\) 代表询问你从第L支画笔到第R支画笔中共有几种不同 ...
- [洛谷P1903][国家集训队]数颜色
题目大意:有$n$支画笔,有两个操作 $Q\;l\;r:$询问$[l,r]$中有几种颜色 $R\;p\;Col:$把第$p$支画笔的颜色改成$Col$ 题解:带修莫队,分为$n^{\frac{1}{3 ...
- 洛谷P1903 [国家集训队]数颜色 / 维护队列 ( 带 修 )
题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...
- 洛谷 P1903 [国家集训队]数颜色 / 维护队列 带修莫队
题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: \(1\). \(Q\) \(L\) \(R\)代表询问你从第\(L\) ...
- bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
- P1903 [国家集训队]数颜色 / 维护队列(莫队区间询问+单点修改)
题目链接:https://www.luogu.org/problemnew/show/P1903 题目大意:中文题目 具体思路:莫队单点修改+区间询问模板题,在原来的区间询问的基础上,我们要记录当前这 ...
随机推荐
- js 控制文本框输入要求
把输入框中 输入的字符串含有中文逗号 改成 英文逗号 举例: <input type="text" id="keywords" style="w ...
- 浅谈 Attention 机制的理解
什么是注意力机制? 注意力机制模仿了生物观察行为的内部过程,即一种将内部经验和外部感觉对齐从而增加部分区域的观察精细度的机制.例如人的视觉在处理一张图片时,会通过快速扫描全局图像,获得需要重点关注的目 ...
- vue自定义表单生成器,可根据json参数动态生成表单
介绍 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组件.结合内置17种常用表单组件和自定义组件,再复杂的表单都可 ...
- 【NOIP2018】标题统计-C++
描述 凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大.小写英文字母.数字字符.空格和换行符.统计标题字符数时,空格和换行符不计算在内. 输入 输入文件名为 tit ...
- go 格式化 int,位数不够0补齐
n := 32 sInt := fmt.Sprintf("%07d", n)
- 宽字符转窄字符CW2AEX<>(szAreaInfo,CP_UTF8)
CString szAreaInfo; CW2AEX<>(szAreaInfo,CP_UTF8); 最好能像上面这样转换,否则汉字就会转成乱码.
- 细说Ansible主机清单inventory
Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 关于Ansible是 ...
- NOIP2018普及T4暨洛谷P5018 对称二叉树题解
题目链接:https://www.luogu.org/problemnew/show/P5018 花絮:这道题真的比历年的t4都简单的多呀,而且本蒟蒻做得出t4做不出t3呜呜呜... 这道题可以是一只 ...
- 个人永久性免费-Excel催化剂功能第53波-无比期待的合并工作薄功能
合并工作薄.工作表功能,几乎每一款Excel插件都提供,而且系列衍生功能甚至有多达10多个.今天Excel催化剂重拾武器,在现有众多插件没提供到位的部分场景中,给予支持和补充,做到人有我优,人无我有的 ...
- 十一、SQL Server CONVERT() 函数
定义和用法 CONVERT() 函数是把日期转换为新数据类型的通用函数. CONVERT() 函数可以用不同的格式显示日期/时间数据. 语法 CONVERT(data_type(length),dat ...