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< ...
随机推荐
- nginx 下使用 bootstrap 字体的问题
使用boostrap时,出现 glyphicons-halflings-regular.ttf glyphicons-halflings-regular.woff glyphicons-halflin ...
- 前端程序员:月薪 5K 到 5 万
入行行头:5 大硬件 请准备好以下东西 一颗人类的大脑:智商在平均水平线以上即可 一份强烈的渴望:我的代码要可以运行在任何一个有浏览器的设备上. 一台笔记本电脑:不需要花费很多钱得那种,只要它可以运行 ...
- redis cluster集群部署
上一篇http://www.cnblogs.com/qinyujie/p/9029153.html,主要讲解了 redis cluster 集群架构 的优势.redis cluster 和 redis ...
- Python基础之软件目录结构规范
设计一个层次清晰的目录结构,就是为了达到这两点: 可读性高:不熟悉项目的人,一眼就能看懂目录结构. 可维护性高:随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好. 目录组织方式 ...
- python三层架构
conf/setting(配置文件) 一般是对utility进行相关设置 index(主文件) main函数触发某个对象的业务逻辑方法 model(数据库) admin 是对数据库的操 ...
- ovn-sb 摘要
1.Database Structure Physical network table中包含了和chassis nodes有关的所有信息,包括用于overlay所需的IP地址,支持的tunnel类型以 ...
- 商铺项目(Redis缓存)
AOF,RDB是两种 redis持久化的机制.用于crash后,redis的恢复. 两种区别就是,AOF是持续的用日志记录写操作,crash后利用日志恢复:RDB是平时写操作的时候不触发写,只有手动提 ...
- 邮件服务器Postfix的管理 重启php-fpm
Postfix邮件系统安装与配置:Postfix,Cyrus-IMAP,Cyrus-sasl,Dovecot和SPFhttp://www.freehao123.com/postfix-cyrus/Ce ...
- WHCTF2017线上小记
第四届XCTF开始,首战因素,加上团队刚加入了两个新人的原因,还是决定一块参与一下.水了3题.2个RE和1个MISC,照顾新人,写的比较啰嗦. [MISC] PY-PY-PY 下载题目之后是一个pyc ...
- gerrit上sshkey设置问题
gerrit里面设置ssh的方法 http://blog.sina.com.cn/s/blog_4d4bc1110101dbxs.html `ssh-keygen -t dsa -b 1024` d ...