题目传送门:https://www.luogu.org/problemnew/show/P3939

题外话:写完这题后本地跑了下极限数据,用时1.5s,于是马上用fread+fwrite优化至0.3s,交至OJ,跑了600+ms,好奇地去掉fread和fwrite,居然只跑了700+ms(总感觉哪里不太对劲)。

此题有一个性质:对于一个点i,其有且只有一只兔子,且该兔子的颜色是唯一的。考虑到数据范围较小(兔子数量和颜色数量均$\leq 3*10^{5}$),我们可以对所有颜色开一棵线段树,维护该区间内有多少只兔子的颜色符合该线段树要求。更新答案时,先将两只兔子分别从两棵线段树中删去,然后再插回线段树中。由于线段树数量较多,若使用非动态开点线段树,其空间复杂度为$O(n \times max(c_{i}))$,显然MLE。故必须采用动态开点线段树,空间复杂度降低至$O((n+m)\times log(n))$。该做法时间复杂度为$O((n+m)\times log(n))$。

 #include<iostream>
#include<cstdio>
#include<cstring>
#define M 310000
using namespace std;
struct sgt{int lc,rc,sum;}a[M*]={}; int rt[M]={},use=;
int col[M]={};
int query(int x,int l,int r,int ll,int rr){
if(!x) return ;
if(l<=ll&&rr<=r) return a[x].sum;
int mid=(ll+rr)>>,sum=;
if(l<=mid) sum=query(a[x].lc,l,r,ll,mid);
if(mid<r) sum+=query(a[x].rc,l,r,mid+,rr);
return sum;
}
int updata(int x,int k,int ll,int rr,int zhi){
if(!x) x=++use; a[x].sum+=zhi;
int mid=(ll+rr)>>; if(ll==rr) return x;
if(k<=mid) a[x].lc=updata(a[x].lc,k,ll,mid,zhi);
else a[x].rc=updata(a[x].rc,k,mid+,rr,zhi);
return x;
}
int main(){
int n,m; scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int x; scanf("%d",&x); col[i]=x;
rt[x]=updata(rt[x],i,,n,);
}
while(m--){
int op,l,r,x; scanf("%d",&op);
if(op==){
scanf("%d%d%d",&l,&r,&x);
printf("%d\n",query(rt[x],l,r,,n));
}else{
scanf("%d",&x);
rt[col[x]]=updata(rt[col[x]],x,,n,-);
rt[col[x+]]=updata(rt[col[x+]],x+,,n,-);
rt[col[x]]=updata(rt[col[x]],x+,,n,);
rt[col[x+]]=updata(rt[col[x+]],x,,n,);
swap(col[x],col[x+]);
}
}
}

【mNOIP模拟赛Day 1】 T2 数颜色的更多相关文章

  1. 洛谷mNOIP模拟赛Day1-数颜色

    传送门 题目大意: 给定一个序列,维护每个数字在[L,R]出现的次数以及交换a[x]和a[x+1]的操作 一开始想的分桶法,感觉复杂度还可以吧,常数有点大,于是死得很惨(65分) #include&l ...

  2. 洛谷mNOIP模拟赛Day1-斐波那契

    题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家 ...

  3. 洛谷mNOIP模拟赛Day2-将军令

    题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人 ...

  4. 模拟赛DAY 2 T2不老梦

    [题目背景] 于万人中万幸得以相逢,刹那间澈净明通. 成为我所向披靡的勇气和惶恐,裂山海,堕苍穹. 爱若执炬迎风,炽烈而哀恸,诸般滋味皆在其中. 韶华宛转吟诵,苍凉的光荣,急景凋年深情难共. ——银临 ...

  5. 洛谷mNOIP模拟赛Day2-星空

    题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 命运偷走如果只留下结果, 时间偷走初衷只留下了苦衷. 你来过,然后你走后,只留下星空. ...

  6. 洛谷mNOIP模拟赛Day1-分组

    传送门 首先是贪心的思路 从后向前选,能多选就多选, 理由:数字越少肯定越优,同时间隔尽量向前推,字典序尽量小 对于K==1,枚举1~512直接判断 对于K==2,需要用镜像并查集,来刻画" ...

  7. 洛谷mNOIP模拟赛Day2-入阵曲

    题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...

  8. 【洛谷mNOIP模拟赛Day1】T1 斐波那契

    题目传送门:https://www.luogu.org/problemnew/show/P3938 这题出得特别吼啊~~ 通过打表或者大胆猜想斐波那契数列的一些性质,我们不难发现对于一只兔子$x$,其 ...

  9. NOIP模拟赛(by hzwer) T2 小奇的序列

    [题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个长度为 n 的数列,以及 m 次询问,每次给出三个数 l,r 和 P, 询问 (a[l'] + a[l'+1] + ... + ...

随机推荐

  1. circos 绘制关系型图ribbon,并加入透明度

    luminance = lum80<<include colors_fonts_patterns.conf>><colors># r,g,b,a color def ...

  2. IIS 6 备忘

    用IIS7久了, 回到IIS6 总被搞混,所以记录下,以备忘记. 以下是转载和整合了他人的资源,原出处不详.   IIS Web 服务器的权限设置有两个地方,一个是 NTFS 文件系统本身的权限设置, ...

  3. DevExpress VCL 13.1.2 发布

    DevExpress VCL 的2013 第一个公开版发布, 基本上就是一些维护,没有大的变化,也没有FM 的支持. What's New in DevExpress VCL 13.1.2   Rel ...

  4. PyCharm2017破解版安装

    PyCharm2017破解版安装步骤: 1.右击软件压缩包选择解压到pycharm2017. 2.在解压文件夹里面找到pycharm-professional-171.3780.47,右击打开. 3. ...

  5. CentOS7+Nginx+多个Tomcat配置

    转载自:https://blog.csdn.net/name_chc/article/details/73332272:亲测可用,加了一些注释: 配置多个tomcat转发 另附上tomcat启动慢的解 ...

  6. java中线程和并发面试题

    http://www.cnblogs.com/dolphin0520/p/3932934.html http://www.cnblogs.com/dolphin0520/p/3958019.html ...

  7. c++内存管理方式

    概述 本章总结一些关于个人对内存管理的理解,主要包括如下内容: 内存管理原则 优秀的接口 智能指针的作用在哪里? 内存管理原则 学c++的同学都知道这个内存管理原则,就是“谁创建,谁释放”或者说“谁申 ...

  8. hdu2844

    题目 这道题,刚开始题没读懂,就是这句话:,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of ...

  9. Redis.conf配置文件内容详解

    #默认以后台方式运行 daemonize yes #指定redis pid文件 pidfile /data/apps/var/redis2/redis2.pid #指定redis启动占用的端口 por ...

  10. 关于ListBox的几个问题

    Winfrom ListBox绑定数据源list界面不更新问题与绑定数据源不可CRUD问题 场景:获取一个listbox的选中项添加到另一个listbox中 解决方案-1:不要直接绑定DataSour ...