题面

我当时在考场上划水的时候好像乱搞搞了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的更多相关文章

  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

    Description 题库链接 给你 \(n+1\) 个节点的一棵树,节点编号为 \(0\sim n\) , \(0\) 为根.边集为 \(\mathbb{E}=\left\{(u,v)\big|\ ...

随机推荐

  1. 一条insert语句插入数据库

    CREATE TABLE test_main ( id INT NOT NULL, value VARCHAR(10), PRIMARY KEY(id) ); oracle插入方式:INSERT IN ...

  2. 20155325 Exp2 后门原理与实践

    基础问答 例举你能想到的一个后门进入到你系统中的可能方式? 乱点链接 学电脑小白不正确配置电脑 下载非官网软件 例举你知道的后门如何启动起来(win及linux)的方式? 软件:ncat socat ...

  3. mfc CListCtrl 报表格式

    知识点: CListCtrl报表格式 CListCtrl报表格式添加列 CListCtrl报表格式添加行 CListCtrl报表格式设置单元格 一.CListCtrl报表格式 类名:SysListVi ...

  4. 配置yum,nc,telnet

    一.学习中问题 最近学习在学习Hadoop的一个子项目Zookeeper,在测试其中的“四字命令”---”echo ruok|nc localhost 2181“时发现命令无法被识别,如下图所示: [ ...

  5. vsftp在防火墙开启需要开放的端口

    1.开放tcp端口 firewall-cmd --zone=public --add-port=20/tcp --permanent firewall-cmd --zone=public --add- ...

  6. 条件GAN论文简单解读

        条件GAN(Conditional Generative Adversarial Nets),原文地址为CGAN. Abstract     生成对抗网络(GAN)是最近提出的训练生成模型(g ...

  7. kubeadm安装kubernetes 1.13.1集群完整部署记录

    k8s是什么 Kubernetes简称为k8s,它是 Google 开源的容器集群管理系统.在 Docker 技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提 ...

  8. PAT甲题题解-1011. World Cup Betting (20)-误导人的水题。。。

    题目不严谨啊啊啊啊式子算出来结果是37.975样例输出的是37.98我以为是四舍五入的啊啊啊,所以最后输出的是sum+0.005结果告诉我全部错误啊结果直接保留两位小数就可以了啊啊啊啊 水题也不要这么 ...

  9. VMware10 安装centos6.7 设置NAT模式固定ip

    https://www.cnblogs.com/yychnbt/p/5173761.html

  10. Final发布 文案+美工展示

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2476项目地址:https://coding.net/u/wuyy694/ ...