看代码学习好,好学好懂好ac

原题:

墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?

N≤10000,M≤10000,修改操作不多于1000次,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。3

带修改的莫队裸题

额外增加一维表示时间,排序的时候优先级设为最底,然后莫队即可……

贡献什么的很好想,就不说了

注意想清楚时间轴和答案的关系

看代码学习好,好学好懂好ac

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
struct dcd{int x,y,z,id;}b[],c[]; int tt=;
int n,m,a[]; int blck;
int l,r,t=;
int cnt[],nm=;
int ans[];
bool cmp(dcd x,dcd y){
return (x.x/blck==y.x/blck ? (x.y/blck==y.y/blck ? x.z<y.z : x.y<y.y) : x.x<y.x);
}
void chg(int x,int y){
if(l<=x && x<=r){
--cnt[a[x]]; nm-=(!cnt[a[x]]);
a[x]=y;
nm+=(!cnt[a[x]]); ++cnt[a[x]];
}
else a[x]=y;
}
void updt(int x,int y){
nm+=(!cnt[a[x]]); cnt[a[x]]+=y; nm-=(!cnt[a[x]]);
/*cout<<x<<" "<<y<<endl;
for(int i=1;i<=6;++i) cout<<cnt[i]<<" ";
cout<<endl;*/
}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m; blck=(int)sqrt(n*1.0);
for(int i=;i<=n;++i) a[i]=rd();
char s[];
for(int i=;i<=m;++i){
scanf("%s",s); l=rd(),r=rd();
if(s[]=='Q') b[++tt].z=t,b[tt].x=l,b[tt].y=r,b[tt].id=tt;
else c[++t].x=l,c[t].y=r,c[t].z=a[l],a[l]=r;
}
for(int i=t;i>=;--i) a[c[i].x]=c[i].z;
sort(b+,b+tt+,cmp);
l=,r=,t=;
for(int i=;i<=tt;++i){
while(t<b[i].z) ++t,chg(c[t].x,c[t].y);
while(t>b[i].z) chg(c[t].x,c[t].z),--t;
while(r<b[i].y) ++r,updt(r,);
while(r>b[i].y) updt(r,-),--r;
while(l<b[i].x) updt(l,-),++l;
while(l>b[i].x) --l,updt(l,);
//cout<<i<<endl;
/*cout<<l<<" "<<r<<" "<<t<<" "<<nm<<endl;
for(int j=1;j<=6;++j) cout<<cnt[j]<<" ";
cout<<endl;
for(int j=1;j<=n;++j) cout<<a[j]<<" ";
cout<<endl;*/
ans[b[i].id]=nm;
}
for(int i=;i<=tt;++i) printf("%d\n",ans[i]);
return ;
}

【BZOJ2120】数颜色的更多相关文章

  1. BZOJ2120 数颜色 【带修莫队】

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

  2. bzoj2120 数颜色 莫队 带修改

    [bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...

  3. BZOJ2120 数颜色 【带修改莫队】

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 6579  Solved: 2625 [Submit][Status][Discus ...

  4. BZOJ2120 数颜色 —— 待修改莫队

    题目链接:https://vjudge.net/problem/HYSBZ-2120 2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit:  ...

  5. BZOJ2120 数颜色(树套树)

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

  6. [Bzoj2120]数颜色 (非正解 )(莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 6286  Solved: 2489[Submit][Status][Discuss] ...

  7. BZOJ2453维护队列&&BZOJ2120数颜色

    2016-05-28 11:20:22 共同的思路: 维护某种颜色上一次在哪里出现pre,可以知道当pre<询问的l时更新答案 块内按照pre排序 修改的时候重新O(n)扫一遍,如果和之前的不一 ...

  8. bzoj2120: 数颜色(BIT套主席树+set/分块)

    带修改的 HH的项链. 带修改考虑用BIT套主席树,查区间里有几个不同的数用a[i]上次出现的位置pre[i]<l的数有几个来算就好了. 考虑怎么修改.修改i的时候,我们需要改变i同颜色的后继的 ...

  9. BZOJ2120 数颜色(带修改莫队)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  10. BZOJ2120 数颜色

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

随机推荐

  1. spoj705

    题解: 后缀数组求出height 然后ans=所有串-所有height 代码: #include<bits/stdc++.h> using namespace std; ; int t,a ...

  2. day3-PyCharm 断点 调试模式

    上篇学习了Python的工具选择,PyCharm的基本设置,简单的了解了下PyCharm的调试模式,今天主要学习下PyCharm的调式模式,在以后的开发中是一个非常重要的工具. [运行]和[调试]前的 ...

  3. SpringMVC中文乱码的解决办法

    中文乱码分类: (1)按照请求分类: GET请求乱码 POST请求乱码 (2)按照乱码位置分类 从前台传到后台的数据乱码(存储到数据库中的数据乱码) 从后台传到前台的数据乱码(显示在页面的数据乱码) ...

  4. RabbitMQ direct类型的Exchange

    就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中. 本篇文章介绍的direct类型就是指定将消息定向发送到哪个队列中. direct,顾名思义,就是直接的意 ...

  5. Centos7下mysql5.7.22主从配置

    一:服务器配置 1.1修改root密码: ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx'; 1.2添加远程登陆用户: GRANT ALL PRIV ...

  6. 开发框架DevExtreme发布v18.2.4|附下载

    DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...

  7. a recipe kindly provided by Dimas for kikuchi

    https://sianipar17.com/2017/12/14/tutorial-for-teleseismic-body-wave-inversion-program/

  8. string使用方法

    转载自:https://blog.csdn.net/tengfei461807914/article/details/52203202 使用场合: string是C++标准库的一个重要的部分,主要用于 ...

  9. Oracle存储过程基础

    http://blog.sina.com.cn/s/blog_67e424340100iyg1.html

  10. git命令学习

    git init:把当前目录变成Git可以管理的仓库git add file:把文件添加到仓库git commit -m "描述语句":把文件提交到仓库git status:该命令 ...