bzoj2120: 数颜色 带修莫队
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?
题解:维护一个sum即答案,和一个记录每种颜色的笔的数目用的数组,然后O(1)转移,
/**************************************************************
Problem: 2120
User: walfy
Language: C++
Result: Accepted
Time:564 ms
Memory:48180 kb
****************************************************************/
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0)
using namespace std;
const double eps=1e-6;
const int N=1000000+10,maxn=20000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
int a[N],belong[N];
struct query{
int l,r,tim,id;
bool operator <(const query&rhs)const{
if(belong[l]==belong[rhs.l])
{
if(belong[r]==belong[rhs.r])return tim<rhs.tim;
return r<rhs.r;
}
return l<rhs.l;
}
}q[N];
struct change{
int pos,suf,pre;
}ch[N];
int sum,co[N],ans[N],now[N];
void gao(int pos,int op)
{
if(op==1)
{
if(co[a[pos]]==0)sum++;
co[a[pos]]++;
}
else
{
if(co[a[pos]]==1)sum--;
co[a[pos]]--;
}
}
void go(int l,int r,int x,int d)
{
if(l<=x&&x<=r)gao(x,-1),a[x]=d,gao(x,1);
else a[x]=d;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int block=sqrt(n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
now[i]=a[i];
belong[i]=(i-1)/block+1;
}
int cnt1=0,cnt2=0;
for(int i=0;i<m;i++)
{
char op[5];
int x,y;scanf("%s%d%d",op,&x,&y);
if(op[0]=='Q')q[++cnt1]={x,y,cnt2,cnt1};
else ch[++cnt2]={x,y,now[x]},now[x]=y;
}
sort(q+1,q+1+cnt1);
int l=1,r=0,ti=0;
for(int i=1;i<=cnt1;i++)
{
while(ti<q[i].tim)ti++,go(l,r,ch[ti].pos,ch[ti].suf);
while(ti>q[i].tim)go(l,r,ch[ti].pos,ch[ti].pre),ti--;
while(l>q[i].l)l--,gao(l,1);
while(r<q[i].r)r++,gao(r,1);
while(l<q[i].l)gao(l,-1),l++;
while(r>q[i].r)gao(r,-1),r--;
// printf("%d -----%d %d %lld\n",l,r,ti,sum);
// for(int j=0;j<=n;j++)printf("%d ",co[j]);puts("");
ans[q[i].id]=sum;
}
for(int i=1;i<=cnt1;i++)printf("%d\n",ans[i]);
return 0;
}
/********************
********************/
bzoj2120: 数颜色 带修莫队的更多相关文章
- bzoj2120 数颜色——带修莫队
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 带修改的莫队: 用结构体存下修改和询问,排好序保证时间后就全局移动修改即可: 参考了T ...
- BZOJ 2120 数颜色 (带修莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6367 Solved: 2537[Submit][Status][Discuss] ...
- bzoj 2120 数颜色 (带修莫队)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间 l - r 内颜色的种类 ,R 单点修改 思路 ...
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...
- 【bzoj2120】数颜色 带修莫队
数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画 ...
- [国家集训队][bzoj2120] 数颜色 [带修改莫队]
题面: 传送门 思路: 这道题和SDOI2009的HH的项链很像,只是多了一个修改 模板套上去呀 莫队学习请戳这里:莫队 Code: #include<iostream> #include ...
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- NOI模拟 颜色 - 带修莫队/树套树
题意: 一个颜色序列,\(a_1, a_2, ...a_i\)表示第i个的颜色,给出每种颜色的美丽度\(w_i\),定义一段颜色的美丽值为该段颜色的美丽值之和(重复的只计算一次),每次都会修改某个位置 ...
- bzoj 2120 数颜色 带修改莫队
带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...
随机推荐
- 服务器为什么这么慢?耗尽了CPU、RAM和磁盘I/O资源
机器运行缓慢通常是由于消耗了太多系统特定的资源.系统的主要资源包括CPU.RAM.磁盘I/O以及网络.过度使用这些资源的任何一种都会让系统陷入困境.不过,如果能登录到系统之中,可以借助大量工具确定问题 ...
- 广通软件荣获“2016年度ITSS优秀会员”称号
1月12日,为了表彰在IT服务标准研制和应用推广工作中所做出的贡献,中国电子工业标准化技术协会信息技术服务分会(以下称ITSS分会)在北京召开“2016年度ITSS优秀会员”专家评选活动,广通软件获得 ...
- 解决SpringMVC中文乱码
第一种:表单提交后controller获得中文参数后乱码解决方案 注意: 1: form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果 2: jsp页面编码设置为UTF-8 ...
- Day02 html回顾和CSS介绍
昨天内容回顾 1.html的操作思想 ** 使用标签把要操作的数据包起来,通过修改标签的属性值来实现标签内数据样式的变化 *** <font size=& ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- Centos安装自定义布局才能自己划分各个区的大小ctrl+z ,fg ,route -n ,cat !$ ,!cat ,XShell 设置, ifconfig CentOS远程连接 Linux中的输入流 第一节课
Centos安装自定义布局才能自己划分各个区的大小ctrl+z ,fg ,route -n ,cat !$ ,!cat ,XShell 设置, ifconfig CentOS远程连接 Linux中 ...
- Openstack(十)部署nova服务(计算节点)
在计算节点安装 10.1安装nova计算服务 # 阿里云源详见2.3配置 # yum install openstack-nova-compute 10.2配置nova计算服务 10.2.1配置nov ...
- Selenium IDE脚本录制步骤简介
录制脚本步骤: 1.打开Selenium IDE,输入需要录制脚本的地址,然后启动Firefox,输入selenium IDE需录制的地址,根据实际需求,做相关操作: 2.录制过程中,会发现做的相关操 ...
- adb shell top 命令
原文地址https://blog.csdn.net/kittyboy0001/article/details/38562515 原文地址https://blog.csdn.net/u010503912 ...
- Java基础知识 Set
在Java中使用Set,可以方便地将需要的类型以集合类型保存在一个变量中.主要应用在显示列表.Set是一个不包含重复元素的 collection. 更确切地讲,set 不包含满足 e1.equals( ...