题意:要求构造一个d的排列使得满足d[i/k]<=d[u]且字典序最大。

标程(bzoj上并不能过):

 #include<bits/stdc++.h>
#define mid ((l+r)>>1)
using namespace std;
const int N=;
const int eps=1e-;
double k;
int tag[N<<],sum[N<<],size[N],n,fa[N],ans[N],d[N];
map<int,int> to;
bool cmp(int A,int B){return A>B;}
void up(int k) {sum[k]=min(sum[k<<],sum[k<<|]);}
void down(int k)
{
if (tag[k])
{
tag[k<<]+=tag[k];tag[k<<|]+=tag[k];
sum[k<<]+=tag[k];sum[k<<|]+=tag[k];
tag[k]=;
}
}
void build(int k,int l,int r)
{
if (l==r) {sum[k]=l;return;}
build(k<<,l,mid);build(k<<|,mid+,r);
up(k);
}
void add(int k,int l,int r,int L,int R,int x)
{
if (L<=l&&r<=R) {sum[k]+=x;tag[k]+=x;return;}
down(k);
if (L<=mid) add(k<<,l,mid,L,R,x);
if (R>mid) add(k<<|,mid+,r,L,R,x);
up(k);
}
int qry(int k,int l,int r,int x)
{
if (l==r) return (x<=sum[k])?l:l+;
down(k);int res;
if (x<=sum[k<<|]) res=qry(k<<,l,mid,x);
else res=qry(k<<|,mid+,r,x);
up(k);//由于前面down标记,查询时也需要up来更新
return res;
}
int main()
{
scanf("%d%lf",&n,&k);
for (int i=;i<=n;i++) scanf("%d",&d[i]),fa[i]=(int)((double)i/k+eps);
for (int i=n;i>=;i--) size[i]++,size[fa[i]]+=size[i];
build(,,n);
sort(d+,d+n+,cmp);
for (int i=n;i>=;i--) if (d[i]!=d[i+]) to[d[i]]=i;
for (int i=;i<=n;i++)
{
if (fa[i]&&fa[i]!=fa[i-]) add(,,n,ans[fa[i]],n,size[fa[i]]-);
int t=qry(,,n,size[i]); ans[i]=to[d[t]]--;
add(,,n,ans[i],n,-size[i]);
}
for (int i=;i<=n;i++) printf("%d ",d[ans[i]]);
return ;
}

题解:线段树+占位

如果直接贪心:从上到下贪心然后把最小的派给编号最大的是不对的。1 1 1 2 应该是1 1 2 1。

直接按编号从小到大考虑。每一层用size占位,线段树维护从小到大的d序列,每一位表示当前位前面有多少个数没被使用。每次选择最靠前的一个sum[x]>=size[i](单调),如果找到x周围有若干个和sum[x]相等,那么选取最靠后的一个(贪心)。如果当前子树的父亲已经处理完毕,那么还原,继续处理儿子。

loj2472[九省联考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. [九省联考2018]IIIDX

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

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

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

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

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

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

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

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

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

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

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

  9. 解题:九省联考2018 IIIDX

    题面 我当时在考场上划水的时候好像乱搞搞了20pts,然后发现一堆同届的都写了55pts的贪心=.=??? 那就先说那55pts的贪心吧,这个现在看起来还是非常显然的,就是按题意来每一块是分属一个点的 ...

随机推荐

  1. Map和List集合嵌套取值

    遍历List的方法: List<User> list = new ArrayList();list = userMapper.getUserList();//从数据库取得list值for( ...

  2. 力扣—gray code (格雷编码) python实现

    题目描述: 中文: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 英文: Th ...

  3. 程序猿必备的10款web前端动画插件

    1.基于jQuery的瀑布流图片筛选插件 瀑布流的展现方式在目前的网页中用得越来越广泛,特别是图片和首页文章的动态加载. 今天分享的这款就是基于jQuery的瀑布流图片筛选插件,我们可以点击图片分类名 ...

  4. Linux中的系统服务_02

    Linux中的系统服务_02 1. 在linux增加服务后,如果要实现随着操作系统的启动而启动,需要是用chkconfig命令,加入到系统服务中. 但是对于的脚本的表头,需要增加如下内容 #!/bin ...

  5. Vue中app实例对象的几种写法

    1.传统方法(练习 小DEMO中用的这种) <script type="text/ecmascript"> var app=new Vue({ el:"#ap ...

  6. python3.x current_question

    扩散四维过程遇到的问题,暂不能解决,但先收集起来. ''' list_str=['test', None, '', 'str', ' ', 'END'] data = filter(lambda st ...

  7. MYSQL中判断函数有哪些

    新建一张客户表,如下:sex:1-男,2-女,3-未知:level是客户的级别:1-超级VIP客户,2-VIP客户,3-普通客户 方式一:case函数:流程控制函数 用法一: CASE express ...

  8. TableStore最佳实践:轻松实现轨迹管理与地理围栏

    摘要: 基于TableStore轻松实现亿量级轨迹管理与地理围栏 一.方案背景 轨迹管理系统日常生活中使用非常普遍,如外卖派送轨迹.快递物流流转.车辆定位轨迹等.该场景与地理位置管理类似,核心点与瓶颈 ...

  9. Python文件操作生成csv及其他存储类型

    通常Pandas用习惯后,比较喜欢用.to_csv的操作直接来转成csv文件,但如果是对于列表,则可以使用文件操作生成写入csv文件: #打开文件fid0=open('baseline.csv','w ...

  10. 【Shiro】二、Apache Shiro配置

    1.配置 使用配置获得SecurityManager,SecurityManager是核心,配置好并获取到SecurityManager,Shiro就算正式运行起来了. 两种方式:通过ini文件:通过 ...