bzoj

luogu

sol

首先可以把依赖关系转成一个森林。自下而上维护出每个点的\(size\),表示这关解锁以后一共有多少关。

考虑没有重复数字的情况。

直接从小往大贪心把每个数赋给当前已解锁的最后一关就可以了。

有重复?

一样的。重复的数字一起考虑,假设有\(k\)个重复的数,那就把这个数先赋给第\(k\)大的位置,然后是\(k-1\)大。。。直到\(k\)个数全部填满。

code

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 5e5+5;
int n,d[N],nxt[N],head[N],fa[N],sz[N],t[N<<2],ans[N];
double k;
void dfs(int u)
{
sz[u]=1;
for (int v=head[u];v;v=nxt[v])
dfs(v),sz[u]+=sz[v];
}
void modify(int x,int l,int r,int p,int v)
{
t[x]+=v;if (l==r) return;
int mid=l+r>>1;
if (p<=mid) modify(x<<1,l,mid,p,v);
else modify(x<<1|1,mid+1,r,p,v);
}
int query(int x,int l,int r,int k)
{
if (l==r) return l;int mid=l+r>>1;
if (k<=t[x<<1|1]) return query(x<<1|1,mid+1,r,k);
else return query(x<<1,l,mid,k-t[x<<1|1]);
}
int main()
{
n=gi();scanf("%lf",&k);
for (int i=1;i<=n;++i)
{
fa[i]=(int)floor(i/k);
if (fa[i]) nxt[i]=head[fa[i]],head[fa[i]]=i;
}
for (int i=1;i<=n&&!fa[i];++i) dfs(i);
for (int i=1;i<=n&&!fa[i];++i) modify(1,1,n,i,sz[i]);
for (int i=1;i<=n;++i) d[i]=gi();sort(d+1,d+n+1);
for (int i=1,j=1;i<=n;i=j)
{
while (j<=n&&d[j]==d[i]) ++j;
for (int k=j-i;k;--k)
{
int u=query(1,1,n,k);ans[u]=d[i];
modify(1,1,n,u,-sz[u]);
for (int v=head[u];v;v=nxt[v]) modify(1,1,n,v,sz[v]);
}
}
for (int i=1;i<=n;++i) printf("%d ",ans[i]);
puts("");return 0;
}

[BZOJ5249][多省联测2018]IIIDX的更多相关文章

  1. [luogu] P4364 [九省联考2018]IIIDX(贪心)

    P4364 [九省联考2018]IIIDX 题目背景 Osu 听过没?那是Konano 最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在,他在世界知名游戏公司KONMAI ...

  2. [BZOJ5249][九省联考2018]IIIDX(线段树)

    5249: [2018多省省队联测]IIIDX Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 32  Solved: 17[Submit][Statu ...

  3. BZOJ5249:[九省联考2018]IIIDX——题解

    https://www.luogu.org/problemnew/show/P4364#sub https://www.lydsy.com/JudgeOnline/problem.php?id=524 ...

  4. [BZOJ5249][九省联考2018]IIIDX:线段树+贪心

    分析 GXZlegend orz 构造出一组合法的解并不是难事,但是我们需要输出的是字典序最大的解. 字典序最大有另一种理解方式,就是让越小的数尽量越靠后. 我们从树的根结点出发,从1开始填数,构造出 ...

  5. [九省联考2018]IIIDX

    题目描述 这一天,Konano接到了一个任务,他需要给正在制作中的游戏<IIIDX>安排曲目的解锁顺序.游戏内共有n首曲目 ,每首曲目都会有一个难度d,游戏内第i首曲目会在玩家Pass第t ...

  6. 洛谷 4364 [九省联考2018]IIIDX——“预留”的思路

    题目:https://www.luogu.org/problemnew/show/P4364 原来想了一个错误的思路,就是这样: solve( cr , l , r ) 表示 cr 为根的子树填 [ ...

  7. 洛谷P4364 [九省联考2018]IIIDX 【线段树】

    题目 [题目背景] Osu听过没?那是Konano最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在 ,他在世界知名游戏公司KONMAI内工作,离他的梦想也越来越近了.这款 ...

  8. [luogu]P4364 [九省联考2018]IIIDX

    题目背景 Osu 听过没?那是Konano 最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在,他在世界知名游戏公司KONMAI 内工作,离他的梦想也越来越近了. 这款音乐 ...

  9. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

随机推荐

  1. 序列化+protobuff+redis

    背景: 当redis里面需要存储 “key-字符串,value-对象” 时,是不能直接存对象,而是需要将序列化后的对象存进redis. redis没有实现内部序列化对象的功能,所以需要自己提前序列化对 ...

  2. Service Fusing

    服务熔断也称服务隔离,来自于Michael Nygard 的<Release It>中的CircuitBreaker应用模式,Martin Fowler在博文CircuitBreaker中 ...

  3. 20145230《java学习笔记》第七周学习总结

    20145230 <Java程序设计>第7周学习总结 教材学习内容 Lambda语法概览 我们在许多地方都会有按字符串长度排序的需求,如果在同一个方法内,我们可以使用一个byName局部变 ...

  4. 发现一个小坑的地方,unity的协程,想要停止,必须以字符串启动

    今天想要停止一个协成,发现调用 StopCoroutine(ShowDebug()); 竟然不管用,后来看了文档才知道,原来想要停止协成,必须用字符启动协程 StartCoroutine(" ...

  5. Python的装饰器实例用法小结

    这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念.功能.使用方法及相关注意事项 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让 ...

  6. Go Flag包-命令行参数解析

    Flag包用法 package main import ( "flag" "fmt" ) func main() { var num int var mode ...

  7. tomcat添加登录用户名密码

    tomcat版本 apache-tomcat-7.0.55.tar.gz 编辑 TOMCAT_HOME/conf/tomcat-users.xml在tomcat-users里面添加 <tomca ...

  8. Linux Ctrl+Z VS Ctrl+C 以及+Z的使用方法

    问题及处理: Ctrl+Z是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任 ...

  9. COUNT(DISTINCT a.TransportOrderID)的用法

    DECLARE @StartDate DATETIME= '2017-12-20 00:00:00';DECLARE @EndDate DATETIME= '2017-12-26 00:00:00'; ...

  10. watcher

    https://wiki.openstack.org/wiki/Watcher Watcher为OS提供资源优化.主要是通过虚拟机迁移来提高整个数据中心的运营效率,降低TCO. 功能特点: 通过虚拟机 ...