解题:九省联考2018 IIIDX
我当时在考场上划水的时候好像乱搞搞了20pts,然后发现一堆同届的都写了55pts的贪心=。=???
那就先说那55pts的贪心吧,这个现在看起来还是非常显然的,就是按题意来每一块是分属一个点的,其实这就是棵树,排序之后从叶子往上递增地放就可以了,挺送的=。=
为什么错了,显然有相同的数的时候可能把一个大点的数放前面也是对的,然后就不优了。如何抢救这个算法哪?
我们继续刚才那个思路,那么一个数可以填到当前的位置上当且仅当大于等于它的数的数目大于等于这个数所在子树的大小。我们先预留出一个点的子树那些数,然后线段树护维护对于每个位置
还能填的数的个数。每次在线段树上二分出最小的(有好几个一样的就找最靠右的)大于等于子树预留大小的位置填上去,之后更新小于这个数的位置的能填的数的个数。
注意每次查询时如果父亲还给这个节点预留着位置先把位置放下来,填完再把这个点的子树留回去
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=2e6+;
int val[N],fth[N],siz[N],lst[N];
int n,minn[M],laz[M],rnk[N];
double k;
bool cmp(int x,int y)
{
return x>y;
}
void Release(int nde)
{
if(laz[nde])
{
int ls=*nde,rs=*nde+;
minn[ls]+=laz[nde],minn[rs]+=laz[nde];
laz[ls]+=laz[nde],laz[rs]+=laz[nde],laz[nde]=;
}
}
void Create(int nde,int l,int r)
{
if(l==r)
minn[nde]=l;
else
{
int mid=(l+r)/,ls=*nde,rs=*nde+;
Create(ls,l,mid),Create(rs,mid+,r);
minn[nde]=min(minn[ls],minn[rs]);
}
}
void Change(int nde,int l,int r,int ll,int rr,int tsk)
{
if(l>rr||r<ll)
return ;
else if(l>=ll&&r<=rr)
minn[nde]+=tsk,laz[nde]+=tsk;
else
{
int mid=(l+r)/,ls=*nde,rs=*nde+; Release(nde);
Change(ls,l,mid,ll,rr,tsk),Change(rs,mid+,r,ll,rr,tsk);
minn[nde]=min(minn[ls],minn[rs]);
}
}
int Query(int nde,int l,int r,int tsk)
{
if(l==r)
return l+(tsk>minn[nde]);
else
{
int mid=(l+r)/,ls=*nde,rs=*nde+; Release(nde);
return (tsk<=minn[rs])?Query(ls,l,mid,tsk):Query(rs,mid+,r,tsk);
}
}
int main()
{
scanf("%d%lf",&n,&k);
for(int i=;i<=n;i++)
scanf("%d",&val[i]),siz[i]=;
sort(val+,val++n,cmp);
for(int i=n;i;i--)
{
fth[i]=1.0*i/k,siz[fth[i]]+=siz[i];
if(val[i]==val[i+]) lst[i]=lst[i+]+;
}
Create(,,n);
for(int i=;i<=n;i++)
{
if(fth[i]!=fth[i-])
Change(,,n,rnk[fth[i]],n,siz[fth[i]]-);
int ans=Query(,,n,siz[i]);
ans+=lst[ans],lst[ans]++,ans-=lst[ans]-;
rnk[i]=ans,Change(,,n,ans,n,-siz[i]);
}
for(int i=;i<=n;i++)
printf("%d ",val[rnk[i]]);
return ;
}
解题:九省联考2018 IIIDX的更多相关文章
- [luogu] P4364 [九省联考2018]IIIDX(贪心)
P4364 [九省联考2018]IIIDX 题目背景 Osu 听过没?那是Konano 最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在,他在世界知名游戏公司KONMAI ...
- [BZOJ5249][九省联考2018]IIIDX(线段树)
5249: [2018多省省队联测]IIIDX Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 32 Solved: 17[Submit][Statu ...
- [九省联考2018]IIIDX
题目描述 这一天,Konano接到了一个任务,他需要给正在制作中的游戏<IIIDX>安排曲目的解锁顺序.游戏内共有n首曲目 ,每首曲目都会有一个难度d,游戏内第i首曲目会在玩家Pass第t ...
- 洛谷 4364 [九省联考2018]IIIDX——“预留”的思路
题目:https://www.luogu.org/problemnew/show/P4364 原来想了一个错误的思路,就是这样: solve( cr , l , r ) 表示 cr 为根的子树填 [ ...
- BZOJ5249:[九省联考2018]IIIDX——题解
https://www.luogu.org/problemnew/show/P4364#sub https://www.lydsy.com/JudgeOnline/problem.php?id=524 ...
- 洛谷P4364 [九省联考2018]IIIDX 【线段树】
题目 [题目背景] Osu听过没?那是Konano最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在 ,他在世界知名游戏公司KONMAI内工作,离他的梦想也越来越近了.这款 ...
- [luogu]P4364 [九省联考2018]IIIDX
题目背景 Osu 听过没?那是Konano 最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在,他在世界知名游戏公司KONMAI 内工作,离他的梦想也越来越近了. 这款音乐 ...
- BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...
- [九省联考 2018]IIIDX
Description 题库链接 给你 \(n+1\) 个节点的一棵树,节点编号为 \(0\sim n\) , \(0\) 为根.边集为 \(\mathbb{E}=\left\{(u,v)\big|\ ...
随机推荐
- kettle学习笔记(十)——数据检验、统计、分区与JS脚本
一.概述 数据剖析和数据检验: 用于数据的检查.清洗 . 统计步骤: 提供数据采样和统计的功能 分区: 根据数据里某个字段的值,拆分成多个数据块.输出到不同的库表和文件中. 脚本: Javascrip ...
- 大数据入门第二十三天——SparkSQL(一)入门与使用
一.概述 1.什么是sparkSQL 根据官网的解释: Spark SQL is a Spark module for structured data processing. 也就是说,sparkSQ ...
- 20155216 Exp3 免杀原理与实践
Exp3 免杀原理与实践 基于特征码的改变来实现免杀(实践过程记录) MSF编码器编译后门检测 可以通过VirSCAN来检验后门抗杀能力. ps:选择后门前修改其文件名,不得含有数字. 如上图所示,3 ...
- 20155232《网络对抗》Exp7 网络欺诈防范
20155232<网络对抗>Exp7 网络欺诈防范 一.实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立冒名网 ...
- 20155304《网络对抗》Exp8 Web基础
20155304<网络对抗>Exp8 Web基础 实践要求 (1).Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的H ...
- JavaScript快速入门-ECMAScript运算符
1.逻辑运算符 逻辑与:&&(and) 逻辑或:||(or) 逻辑非:!(not) 逻辑 AND 运算符(&&) 逻辑 AND 运算的运算数可以是任何类型的,不止是 B ...
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
本系列文章都会以一个程序的实例开发为主线来进行讲解,以求达到一个循序渐进的学习效果,这样更能加深大家对于程序为什么要这样写的用意,理论加上实际的应用才能达到事半功倍的效果,不是吗? 最下方有源码的下载 ...
- 基于.NET Standard的分布式自增ID算法--美团点评LeafSegment
概述 前一篇文章讲述了最流行的分布式ID生成算法snowflake,本篇文章根据美团点评分布式ID生成系统文章,介绍另一种相对更容易理解和编写的分布式ID生成方式. 实现原理 Leaf这个名字是来自德 ...
- 获取【酷我音乐】歌曲URL地址
非原创 酷我中的歌曲的页面地址通常是:www.kuwo.cn/yinyue/6181801,末尾的一串数字是这首歌曲的编号id. 我们只须在 http://player.kuwo.cn/webmusi ...
- SqlHelper DBHelper
根据自己项目的开发需要,整理了一个SqlHelper类 相比较网上通用的SqlHelper类方法主要有一下几点的不同: 1.因为要操作多个数据库,所以数据库连接字符串没有写死到方法里,作为参数提供出来 ...