luogu 1903 [国家集训队]数颜色 / 维护队列 带修改莫队
十分玄学的数据结构~
code:
#include <bits/stdc++.h>
#define N 1000006
#define setIO(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
using namespace std;
int n,m,ans,B,cnt,tot,now;
int a[N],tim[N],output[N];
struct query
{
int l,r,t,id;
bool operator<(query b) const
{
return l/B==b.l/B?(r/B==b.r/B?t<b.t:r<b.r):l<b.l;
}
}q[N];
struct change
{
int p,col;
}c[N];
void add(int x)
{
if(tim[x]==0) ++ans;
++tim[x];
}
void del(int x)
{
if(tim[x]==1) --ans;
--tim[x];
}
void work(int x,int d)
{
// 需要进行变动
if(c[d].p>=q[x].l&&c[d].p<=q[x].r) del(a[c[d].p]), add(c[d].col);
swap(c[d].col, a[c[d].p]);
}
int main()
{
// setIO("input");
int i,j,l=2,r=1;
scanf("%d%d",&n,&m);
B=pow(n,0.6666);
for(i=1;i<=n;++i) scanf("%d",&a[i]);
for(i=1;i<=m;++i)
{
char op[2];
scanf("%s",op);
if(op[0]=='Q')
{
++cnt;
scanf("%d%d",&q[cnt].l,&q[cnt].r);
q[cnt].id=cnt;
q[cnt].t=tot;
}
else
{
++tot;
scanf("%d%d",&c[tot].p,&c[tot].col);
}
}
sort(q+1,q+1+cnt);
for(i=1;i<=cnt;++i)
{
for(;l>q[i].l;) add(a[--l]);
for(;r<q[i].r;) add(a[++r]);
for(;l<q[i].l;) del(a[l++]);
for(;r>q[i].r;) del(a[r--]);
for(;now<q[i].t;) work(i, ++now);
for(;now>q[i].t;) work(i, now--);
output[q[i].id]=ans;
}
for(i=1;i<=cnt;++i) printf("%d\n",output[i]);
return 0;
}
luogu 1903 [国家集训队]数颜色 / 维护队列 带修改莫队的更多相关文章
- P1903 [国家集训队]数颜色 / 维护队列 带修改莫队
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- Luogu P1903 [国家集训队]数颜色 / 维护队列 (带修莫队)
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...
- 洛谷 P1903 [国家集训队]数颜色 / 维护队列 带修莫队
题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: \(1\). \(Q\) \(L\) \(R\)代表询问你从第\(L\) ...
- P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队
\(\color{#0066ff}{ 题目描述 }\) 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支 ...
- LUOGU P1903 [国家集训队]数颜色 / 维护队列
传送门 解题思路 带修莫队,第一次写,其实和普通莫队差不多,就是多了个时间轴,块分n^(2/3)最优,时间复杂度O(n^(5/3)). #include<iostream> #includ ...
- bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
- 题解 洛谷P1903/BZOJ2120【[国家集训队]数颜色 / 维护队列】
对于不会树套树.主席树的本蒟蒻,还是老老实实的用莫队做吧.... 其实这题跟普通莫队差不了多远,无非就是有了一个时间,当我们按正常流程排完序后,按照基本的莫队来,做莫队时每次循环对于这一次操作,我们在 ...
- P1903 [国家集训队]数颜色 / 维护队列
思路 带修莫队的板子 带修莫队只需要多维护一个时间的指针即可,记录一下每个询问在第几次修改之后,再回退或者前进几个修改操作 排序的时候如果a.l和b.l在一个块里,就看r,如果a.r和b.r在一个块里 ...
- P1903 [国家集训队]数颜色 / 维护队列(带修莫队)
题目描述: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. ...
随机推荐
- 第五章:标准I/O库
本章用于解析C语言标准I/O库,之所以在UNIX类系统的编程中会介绍C语言标准库,主要是因为UNIX和C之间具有密不可分的关系. 标准I/O库相比于操作系统的I/O库,具有更高的效率和可移植性,前者是 ...
- prometheus+grafana监控nginx
被监控机器环境搭建&配置 nginx-module-vts下载: https://github.com/vozlt/nginx-module-vts nginx-module-vts安装 un ...
- AtCoder Grand Contest 040 A - ><
传送门 对于某个位置,只要知道这个位置往左最多的连续 $\text{<}$ 的数量 $x$ 和往右最多的连续 $\text{>}$ 的数量 $y$ 那么这个位置最小可能的数即为 $max( ...
- SpringCloud Hystrix 参数
hystrix.command.default和hystrix.threadpool.default中的default为默认CommandKey Command PropertiesExecution ...
- Centos6 yum安装nginx
1.Centos6系统库中默认是没有nginx的rpn包的,所以我们需要先更新下rpm依赖库 (1):使用yum安装nginx,安装nginx库 rpm -Uvh http://nginx.org/p ...
- SAP Marketing Cloud里的contact main facet是什么意思
界面如下: Basically, contact data for SAP Hybris Marketing can be loaded from various sources, such as a ...
- 解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
最近因为工作需要要使用PHP 7,所以从网上找教程进行安装, 结果编译没问题, 安装的时候报了错误. 错误如下 1 2 3 cp -pR -f phar.phar /usr/local/php7/bi ...
- MySQL菜鸟入门“秘籍”
一.MySQL简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不 ...
- Link monitoring
参考:https://www.ibm.com/support/knowledgecenter/en/linuxonibm/com.ibm.linux.z.l0wlcb00/l0wlcb00_miimo ...
- Windows10关闭自动更新方法
你在为windows10自动更新而烦恼吗?下面教你一招如何关闭自动更新