https://www.luogu.org/problemnew/show/P4364#sub

https://www.lydsy.com/JudgeOnline/problem.php?id=5249

Konano接到了一个任务,他需要给正在制作中的游戏《IIIDX》安排曲目的解锁顺序。游戏内共有n首曲目,每首曲目都会有一个难度d,游戏内第i首曲目会在玩家Pass第trunc(i/k)首曲目后解锁(x为下取整符号)若trunc(i/k)=0,则说明这首曲目无需解锁。举个例子:当k=2时,第1首曲目是无需解锁的(trunc(1/2)=0),第7首曲目需要玩家Pass第trunc(7/2)=3首曲目才会被解锁。Konano的工作,便是安排这些曲目的顺序,使得每次解锁出的曲子的难度不低于作为条件需要玩家通关的曲子的难度,即使得确定顺序后的曲目的难度对于每个i满足Di≥Dtrunc(i/k)。

智商好题。

当时在考场上就写的55分贪心,之后也举出过反例证明无法贪掉d有重复的点,结果凉凉。

但其实和贪心差不多,我们先对d从大到小排序,则对于每个靠前的点来说,它在合法态下尽可能取最靠左的d,而当d相同时它尽可能靠右。

这个位置可以用二分得到,至于合法就用线段树维护当前点左边还可以取多少点即可。

PS:bzoj卡精度。

#include<cstdio>
#include<cmath>
#include<vector>
#include<iostream>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
typedef double dl;
const int N=5e5+5;
const int INF=1e9;
const dl eps=1e-8;
inline int read(){int x=0,w=1;char ch=0;while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*w;
}
int n,d[N],tr[N*4],lz[N*4],cnt[N],size[N],fa[N],ans[N];
dl k;
inline bool cmp(int a,int b){return a>b;}
inline void upt(int a){tr[a]=min(tr[a<<1],tr[a<<1|1]);}
inline void push(int a){if(!lz[a])return;lz[a<<1]+=lz[a];lz[a<<1|1]+=lz[a];tr[a<<1]+=lz[a];tr[a<<1|1]+=lz[a];lz[a]=0;
}
void build(int a,int l,int r){if(l==r){tr[a]=l;return;}int mid=(l+r)>>1;build(a<<1,l,mid);build(a<<1|1,mid+1,r);upt(a);
}
void mdy(int a,int l,int r,int l1,int r1,int w){if(r<l1||r1<l)return;if(l1<=l&&r<=r1){tr[a]+=w;lz[a]+=w;return;}push(a);int mid=(l+r)>>1;mdy(a<<1,l,mid,l1,r1,w);mdy(a<<1|1,mid+1,r,l1,r1,w);upt(a);
}
int query(int a,int l,int r,int x){if(l==r)return tr[a]>=x?l:l+1;push(a);int mid=(l+r)>>1;if(x>tr[a<<1|1])return query(a<<1|1,mid+1,r,x);return query(a<<1,l,mid,x);
}
int main(){scanf("%d%lf",&n,&k);for(int i=1;i<=n;i++)d[i]=read();sort(d+1,d+n+1,cmp);for(int i=n;i>=1;i--){if(d[i]==d[i+1])cnt[i]=cnt[i+1]+1;else cnt[i]=0;fa[i]=(int)((dl)i/k+eps);size[i]++;size[fa[i]]+=size[i];}build(1,1,n);for(int i=1;i<=n;i++){if(fa[i]&&fa[i]!=fa[i-1]){mdy(1,1,n,ans[fa[i]],n,size[fa[i]]-1);}int x=query(1,1,n,size[i]);int t=x;x+=cnt[x];cnt[t]--;ans[i]=x;mdy(1,1,n,ans[i],n,-size[i]);}for(int i=1;i<=n;i++)printf("%d ",d[ans[i]]);puts("");return 0;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9057768.html

BZOJ5249:[九省联考2018]IIIDX——题解相关推荐

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

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

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

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

  3. [九省联考2018]IIIDX

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

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

    ~~~题面~~~ 题解: 一开始翻网上题解看了好久都没看懂,感觉很多人都讲得不太详细,所以导致一些细节的地方看不懂,所以这里就写详细一点吧,如果有不对的or不懂的可以发评论在下面. 首先有一个比较明显 ...

  5. 洛谷P4364 [九省联考2018]IIIDX(线段树)

    传送门 题解看得--很--迷? 因为取完一个数后,它的子树中只能取权值小于等于它的数.我们先把权值从大到小排序,然后记$a_i$为他左边(包括自己)所有取完他还能取的数的个数.那么当取完一个点$x$的 ...

  6. 洛谷 4364 [九省联考2018]IIIDX

    [题解] 一眼可以想到一个类似二叉树后序遍历的贪心做法,然而这个做法在有相同数字的情况下是错误的.最简单的反例就是n=4,d={1,1,1,2},正解是1,1,2,1,而贪心是1,1,1,2. 所以这 ...

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

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

  8. 九省联考2018总结

    前言 我作为一名ZJOI2018day1凉凉选手,为获得更多的省选体验,去上海参加了九省联考2018,当然,是属于外省选手参加的(所以实际并测的时候出现了一些问题也得不到解决),做完两天的题,深有感触 ...

  9. 「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess

    「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess 学校省选模拟居然拿九省联考来考 然而我还是\(too\space young\),搞不懂什么叫最优 让二者的答案最接近可 ...

最新文章

  1. 收藏列表放入MySQL还是redis_mysql导入redis
  2. C/C++信息隐写术(二)之字符串藏入BMP文件
  3. [转载总结]Linux环境下C++运行时动态链接库加载要点总结
  4. Git初始化本地已有项目并上传到远端仓库
  5. vs 生成get set_TVM代码学习 -- 代码生成流程(一)
  6. 鸿蒙os编码_如何看待鸿蒙OS代码示例?
  7. python字母频率_科学网-Python统计字母频数和频率-吕波的博文
  8. cygwin图文安装教程
  9. uva 10817 - Headmaster's Headache ( 状态压缩dp)
  10. abaqus 不收敛问题
  11. 软件开发人员需要记住的10个操作系统概念(译)
  12. 将移动硬盘变为与系统硬盘等同的存在
  13. 苹果VS谷歌,开战了?
  14. 纪念碑谷背后的故事:不差钱!8人团队研发十月
  15. 文件夹的隐藏选项为灰色勾选,无法更改或删除
  16. pg高可用之repmgr(一)
  17. HttpRequest 介绍
  18. 公司内部邮箱服务器发送邮件 java版
  19. java手机游戏开发如何_用JAVA开发手机游戏需要如何构建开发环境?
  20. 世界多国尝试弃用美元 滥用霸权、转嫁危机恐将自食其果

热门文章

  1. MD5消息摘要算法和SHA-1安全散列算法
  2. RSA算法特点及应用简述
  3. VB计算文本文件的行数
  4. 英语总结系列(二十六):唠唠我的二月英语历程
  5. 要抢足球教练饭碗!切尔西未来或将用上AI教练
  6. 魔方全能小王子降临:一个完全不依赖人类知识的AI
  7. 全是大事:百度华为联手搞AI;滴滴再融40亿美元也说搞AI
  8. 哈萨比斯首次解读AlphaZero竟被当场diss,他起身当面回击说…
  9. SpringMVC由浅入深day01_1springmvc框架介绍
  10. 关于WEB集群中文件服务器的讨论