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

标程(bzoj上并不能过):

  1. #include<bits/stdc++.h>
  2. #define mid ((l+r)>>1)
  3. using namespace std;
  4. const int N=;
  5. const int eps=1e-;
  6. double k;
  7. int tag[N<<],sum[N<<],size[N],n,fa[N],ans[N],d[N];
  8. map<int,int> to;
  9. bool cmp(int A,int B){return A>B;}
  10. void up(int k) {sum[k]=min(sum[k<<],sum[k<<|]);}
  11. void down(int k)
  12. {
  13. if (tag[k])
  14. {
  15. tag[k<<]+=tag[k];tag[k<<|]+=tag[k];
  16. sum[k<<]+=tag[k];sum[k<<|]+=tag[k];
  17. tag[k]=;
  18. }
  19. }
  20. void build(int k,int l,int r)
  21. {
  22. if (l==r) {sum[k]=l;return;}
  23. build(k<<,l,mid);build(k<<|,mid+,r);
  24. up(k);
  25. }
  26. void add(int k,int l,int r,int L,int R,int x)
  27. {
  28. if (L<=l&&r<=R) {sum[k]+=x;tag[k]+=x;return;}
  29. down(k);
  30. if (L<=mid) add(k<<,l,mid,L,R,x);
  31. if (R>mid) add(k<<|,mid+,r,L,R,x);
  32. up(k);
  33. }
  34. int qry(int k,int l,int r,int x)
  35. {
  36. if (l==r) return (x<=sum[k])?l:l+;
  37. down(k);int res;
  38. if (x<=sum[k<<|]) res=qry(k<<,l,mid,x);
  39. else res=qry(k<<|,mid+,r,x);
  40. up(k);//由于前面down标记,查询时也需要up来更新
  41. return res;
  42. }
  43. int main()
  44. {
  45. scanf("%d%lf",&n,&k);
  46. for (int i=;i<=n;i++) scanf("%d",&d[i]),fa[i]=(int)((double)i/k+eps);
  47. for (int i=n;i>=;i--) size[i]++,size[fa[i]]+=size[i];
  48. build(,,n);
  49. sort(d+,d+n+,cmp);
  50. for (int i=n;i>=;i--) if (d[i]!=d[i+]) to[d[i]]=i;
  51. for (int i=;i<=n;i++)
  52. {
  53. if (fa[i]&&fa[i]!=fa[i-]) add(,,n,ans[fa[i]],n,size[fa[i]]-);
  54. int t=qry(,,n,size[i]); ans[i]=to[d[t]]--;
  55. add(,,n,ans[i],n,-size[i]);
  56. }
  57. for (int i=;i<=n;i++) printf("%d ",d[ans[i]]);
  58. return ;
  59. }

题解:线段树+占位

如果直接贪心:从上到下贪心然后把最小的派给编号最大的是不对的。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. powerdesigner级联删除

    在Reference Properties属性窗口的Integrity属性页中选中Delete Constraint的Cascade;选中Update Constraint的Cascade.

  2. jQuery 菜单 垂直菜单实现

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  3. atomic 原子操作的类

    import java.util.concurrent.atomic.AtomicInteger; /** * 原子操作的类 atomic */ public class VolatileDemo { ...

  4. docker监控方案实践(cadvisor+influxdb+grafana)

    一.概要 1.1 背景 虚拟化技术如今已经非常热门,如果你不知道什么是虚拟化,那你应该了解虚拟机.虚拟化技术如同虚拟机一样,用于将某些硬件通过软件方式实现"复制",虚拟出" ...

  5. 【dart学习】之字典(Map)的相关方法总结

    一,概述 通常来讲,Map是一个键值对相关的对象,键和值可以是任何类型的对象.每个键只出现一次,而一个值则可以出现多次.映射是动态集合. 换句话说,Maps可以在运行时增长和缩小. dart:core ...

  6. SCP-bzoj-1057

    项目编号:bzoj-1057 项目等级:Safe 项目描述: 戳这里 特殊收容措施: 首先枚举最左上角的点(记为(1,1))是黑点还是白点,这样就可以把与(1,1)不在同一对角线系的格点颜色翻转(形式 ...

  7. Python每日一题 004

    将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中. 代码 import redis import uuid # 创建实例 r=redis.Redis(&quo ...

  8. [CSP-S模拟测试]:简单的填数(贪心+模拟)

    题目描述 对于一个长度为$n$,且下标从$1$开始编号的序列$a$,我们定义它是「合法的」,当且仅当它满足以下条件:·$a_1=1$·对于$i\in [1,n),a_i\leqslant a_{i+1 ...

  9. 2018icpc南京/gym101981 A Adrien and Austin 博弈

    题意: n个连续排列的石子,每次只许拿连续的(中间没有空格)的k个,问你谁必胜 题解: 简单博弈,特判总数为0,k=1两种情况,其他情况先拿必胜,方法是拿掉中间的,然后对方怎么拿你镜面拿就行. #in ...

  10. ROM、PROM、EPROM、EEPROM、Flash ROM分别指什么?

    ROM指的是“只读存储器”,即Read-Only Memory.这是一种线路最简单半导体电路,通过掩模工艺, 一次性制 造,其中的代码与数据将永久保存(除非坏掉),不能进行修改.这玩意一般在大批量生产 ...