5249: [2018多省省队联测]IIIDX

链接

分析:

  贪心。

  将给定的权值从大到小排序,从第一个往后挨个赋值,考虑第i个位置可以赋值那些树。首先满足前面必须至少有siz[i]个权值没选,如果存在相同的数,尽量往后选。

  那么可以给每个权值记录一个值F[i],表示i左边可以选多少个权值了。还要和后面的取一个最小值才是真正的能选多少个。

  在线段树上分治找到这个位置。

  注意在bzoj上,fa[i]=int(1.0*i/k) 有精度误差,而写成floor就可以了。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
int Mn[N << ], tag[N << ], R[N], fa[N], siz[N], ans[N], cnt[N], w[N]; inline bool cmp(int x,int y) { return x > y; }
inline void pushup(int rt) { Mn[rt] = min(Mn[rt << ], Mn[rt << | ]); }
inline void pushdown(int rt) {
tag[rt << ] += tag[rt];tag[rt << | ] += tag[rt];
Mn[rt << ] += tag[rt];Mn[rt << | ] += tag[rt];
tag[rt] = ;
}
void build(int l,int r,int rt) {
tag[rt] = ;
if (l == r) {
Mn[rt] = l; return ;
}
int mid = (l + r) >> ;
build(lson); build(rson);
pushup(rt);
}
void update(int l,int r,int rt,int L,int R,int v) {
if (L <= l && r <= R) {
tag[rt] += v; Mn[rt] += v; return ;
}
if (tag[rt]) pushdown(rt);
int mid = (l + r) >> ;
if (L <= mid) update(lson, L, R, v);
if (R > mid) update(rson, L, R, v);
pushup(rt);
}
int query(int l,int r,int rt,int x) {
if (l == r) return l + (Mn[rt] < x);
if (tag[rt]) pushdown(rt);
int mid = (l + r) >> ;
if (x <= Mn[rt << | ]) return query(lson, x);
else return query(rson, x);
}
int main() {
int n = read();
double k; scanf("%lf", &k);
for (int i = n; i >= ; --i)
fa[i] = floor(1.0 * i / k), siz[i] ++, siz[fa[i]] += siz[i];
for (int i = ; i <= n; ++i) w[i] = read();
sort(w + , w + n + , cmp);
build(, n, );
for (int i = n; i >= ; --i) {
if (w[i] == w[i + ]) R[i] = R[i + ];
else R[i] = i;
}
for (int i = ; i <= n; ++i) {
if (fa[i] && fa[i] != fa[i - ])
update(, n, , ans[fa[i]], n, siz[fa[i]] - );
int x = query(, n, , siz[i]);
x = R[x]; cnt[x] ++; x -= cnt[x] - ; ans[i] = x;
update(, n, , x, n, -siz[i]);
}
for (int i = ; i <= n; ++i) printf("%d ", w[ans[i]]);
return ;
}

5249: [2018多省省队联测]IIIDX的更多相关文章

  1. bzoj 5249 [2018多省省队联测] IIIDX

    bzoj 5249 [2018多省省队联测] IIIDX Link Solution 首先想到贪心,直接按照从大到小的顺序在后序遍历上一个个填 但是这样会有大问题,就是有相同的数的时候,会使答案不优 ...

  2. BZOJ 5249: [2018多省省队联测]IIIDX(贪心 + 线段树)

    题意 这一天,\(\mathrm{Konano}\) 接到了一个任务,他需要给正在制作中的游戏 \(\mathrm{<IIIDX>}\) 安排曲目 的解锁顺序.游戏内共有\(n\) 首曲目 ...

  3. 【刷题】BZOJ 5249 [2018多省省队联测]IIIDX

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

  4. bzoj千题计划324:bzoj5249: [2018多省省队联测]IIIDX(线段树)

    https://www.lydsy.com/JudgeOnline/problem.php?id=5249 把树建出来 如果所有的d互不相同,后续遍历即可 现在有的d相同 将d从小到大排序,考虑如何将 ...

  5. bzoj5249 [2018多省省队联测]IIIDX

    转化一下问题变成给定一棵树,一个序列,求父亲的权值小于子树的最大方案. 直接贪心会在有重复权值时出现错误,我们考虑用线段树优化贪心. 将序列从小到大排序,线段树上每个点记录他和他右边当前还可用的权值, ...

  6. BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)

    题意 题目链接 Sol 不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点 首先,当\(d_i\)互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值.可以 ...

  7. BZOJ_5249_Luogu_P4364_[2018多省省队联测]_IIIDX_九省联考2018_JLOI2018_线段树

    BZOJ_5249_[2018多省省队联测]IIIDX_线段树 Description [题目背景] Osu听过没?那是Konano最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐 ...

  8. bzoj 5248: [2018多省省队联测]一双木棋

    Description 菲菲和牛牛在一块n行m列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手.棋局开始时,棋盘上没有任何棋子, 两人轮流在格子上落子,直到填满棋盘时结束.落子的规则是:一个格子可以落子 ...

  9. bzoj 5251: [2018多省省队联测]劈配

    Description 一年一度的综艺节目<中国新代码>又开始了. Zayid从小就梦想成为一名程序员,他觉得这是一个展示自己的舞台,于是他毫不犹豫地报名了. 题目描述 轻车熟路的Zayi ...

随机推荐

  1. 编译并导入OpenSSL

    编译并导入OpenSSL 1. 首先,需要运行脚本生成OpenSSL库,参考 https://github.com/x2on/OpenSSL-for-iPhone 示例 2. 运行脚本生成静态库 下一 ...

  2. Linux 系统的/etc目录

    /etc目录下的重要文件 /etc/sysconfig/network 指定服务器上的网络配置信息 /etc/rc.d/init.d/network 网络配置脚本信息 网络配置脚本,开机通过脚本文件来 ...

  3. [转]SQL Server 数据库定时自动备份

    前提:在使用下面的备份方式之前需要确保你的Sqlserver Agent服务启动,切设置为自动启动.否则当你服务器重启了但是Agent服务没有启动,那么自动备份任务就不会执行 (一)使用TSql代码自 ...

  4. Django 错误之 No module named ‘MySQLdb’

    由于卸载Mysql时将很多相关依赖包都卸载了,重装mysql后启动django出现如下错误: django.core.exceptions.ImproperlyConfigured:Error loa ...

  5. 【MSSQL教程】#001 整体思维导图

    整个MSSQL体系的一个思维导图,方便理解整个MSSQL需要学习那些方面的知识.

  6. 我做SAP CRM One Order redesign的一些心得体会

    框架开发和应用程序的开发完全不一样. 举个具体的最近折腾我的例子: 创建新的service order,维护header的shipping data,此时order和shipping data的mod ...

  7. 以太坊系列之一: 以太坊RLP用法-以太坊源码学习

    RLP (递归长度前缀)提供了一种适用于任意二进制数据数组的编码,RLP已经成为以太坊中对对象进行序列化的主要编码方式.RLP的唯一目标就是解决结构体的编码问题:对原子数据类型(比如,字符串,整数型, ...

  8. MySQL复制(一)复制原理探讨

    1 复制概述 1.1.复制解决的问题 数据复制技术有以下一些特点: (1) 数据分布 (2) 负载平衡(load balancing) (3) 备份 (4) 高可用性(high availabilit ...

  9. chrome开发者工具那点事

    Elements:查找网页源代码HTML中的任一元素,手动修改任一元素的属性和样式且能实时在浏览器里面得到反馈. Console:记录开发者开发过程中的日志信息,且可以作为与JS进行交互的命令行She ...

  10. jquery环形3D立体旋转特效

      jquery环形3D立体旋转特效 作者/代码整理:站长素材  (转载请附加本文地址,带有“懒人原生”字样的谢绝转载)发布日期:2013-07-20   立体效果比较强的jquery特效,周围小图组 ...