【mNOIP模拟赛Day 1】 T2 数颜色
题目传送门: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 数颜色的更多相关文章
- 洛谷mNOIP模拟赛Day1-数颜色
传送门 题目大意: 给定一个序列,维护每个数字在[L,R]出现的次数以及交换a[x]和a[x+1]的操作 一开始想的分桶法,感觉复杂度还可以吧,常数有点大,于是死得很惨(65分) #include&l ...
- 洛谷mNOIP模拟赛Day1-斐波那契
题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家 ...
- 洛谷mNOIP模拟赛Day2-将军令
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人 ...
- 模拟赛DAY 2 T2不老梦
[题目背景] 于万人中万幸得以相逢,刹那间澈净明通. 成为我所向披靡的勇气和惶恐,裂山海,堕苍穹. 爱若执炬迎风,炽烈而哀恸,诸般滋味皆在其中. 韶华宛转吟诵,苍凉的光荣,急景凋年深情难共. ——银临 ...
- 洛谷mNOIP模拟赛Day2-星空
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 命运偷走如果只留下结果, 时间偷走初衷只留下了苦衷. 你来过,然后你走后,只留下星空. ...
- 洛谷mNOIP模拟赛Day1-分组
传送门 首先是贪心的思路 从后向前选,能多选就多选, 理由:数字越少肯定越优,同时间隔尽量向前推,字典序尽量小 对于K==1,枚举1~512直接判断 对于K==2,需要用镜像并查集,来刻画" ...
- 洛谷mNOIP模拟赛Day2-入阵曲
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...
- 【洛谷mNOIP模拟赛Day1】T1 斐波那契
题目传送门:https://www.luogu.org/problemnew/show/P3938 这题出得特别吼啊~~ 通过打表或者大胆猜想斐波那契数列的一些性质,我们不难发现对于一只兔子$x$,其 ...
- NOIP模拟赛(by hzwer) T2 小奇的序列
[题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个长度为 n 的数列,以及 m 次询问,每次给出三个数 l,r 和 P, 询问 (a[l'] + a[l'+1] + ... + ...
随机推荐
- 20155333 2016-2017-2 《Java程序设计》第八周学习总结
20155333 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 认识NIO NIO(New IO)-from JDK1.4 Channel: 衔接数据节点( ...
- 551. Student Attendance Record I
static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...
- 【转】Paxos算法2-算法过程
——转自:{老码农的专栏} 1.编号处理 根据P2c ,proposer在提案前会先咨询acceptor查看其批准的最大的编号和value,再决定提交哪个value.之前我们一直强调更高编号的prop ...
- C++之new/delete/malloc/free详解
主要内容: 1. C语言中的函数malloc和free 2. C++中的运算符new和delete 3. new/delete与malloc/free之间的联系和区别 4. C/C++程序的内 ...
- idea使用svn提交时出现错误Warning not all local changes may be shown due to an error
参考于https://www.cnblogs.com/zhujiabin/p/6708012.html 解决方案: 1.File > Settings > Version Control ...
- MOD13A1: MODIS/Terra Vegetation Indices 16-Day L3 Global 500 m SIN Grid V006
https://lpdaac.usgs.gov/node/838 Description The MOD13A1 Version 6 product provides a Vegetation Ind ...
- NoSQL: Cassandra, HBase, RocksDB
转自: http://www.linkedin.com/pulse/nosql-cassandra-hbase-rocksdb-siddharth-anand I've had the pleasur ...
- listview 异步加载
http://www.iteye.com/topic/685986 ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴 ...
- HDU1254 推箱子(BFS) 2016-07-24 14:24 86人阅读 评论(0) 收藏
推箱子 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推 ...
- STL中的内存与效率
STL中的内存与效率 1. 使用reserve()函数提前设定容量大小,避免多次容量扩充操作导致效率低下. 关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足 ...