「九省联考 2018」IIIDX 解题报告
「九省联考 2018」IIIDX
这什么鬼题,送的55分要拿稳,实测有60?
考虑把数值从大到小摆好,每个位置\(i\)维护一个\(f_i\),表示\(i\)左边比它大的(包括自己)还有几个数可以选
这个最开始直接处理好,就是>=数值\(i\)的数字个数
如果我们从小到大安排,发现我们需要给当前数安排一个数值,根据贪心,这个数值要尽可能大,但又要满足一个条件,就是这个数值右边的\(\min \{f_i\}\ge siz_{now}\)
安排完了以后,需要给子树再安排一下,就把右边区间的\(f_i\)做一个区间减
然后注意一个事情,进入子树以后,子树会去安排子树,所以在进子树第一个点后要把父亲的安排撤回。
感性一点理解的说,就是贪心的选一个可以选的最大值,需要保证还有一定数目的更大值可以在后面被选,但是你不知道到底这个后面的最大值怎么被选了,于是先维护好已经被选了一定个数这个信息,后面再去安排它。你现在安排它是为了排在它后面的同层点不去干扰它们
Code:
#include <cstdio>
#include <algorithm>
using std::min;
const int N=5e5+10;
const double eps=1e-6;
int n,d[N],b[N],par[N],pos[N],yuu[N],siz[N];
double k;
#define ls id<<1
#define rs id<<1|1
int mi[N<<2],tag[N<<2];
void build(int id,int l,int r)
{
if(l==r) {mi[id]=yuu[l];return;}
int mid=l+r>>1;
build(ls,l,mid),build(rs,mid+1,r);
mi[id]=min(mi[ls],mi[rs]);
}
void pushdown(int id)
{
if(tag[id])
{
mi[ls]+=tag[id];
mi[rs]+=tag[id];
tag[ls]+=tag[id];
tag[rs]+=tag[id];
tag[id]=0;
}
}
void ins(int id,int L,int R,int l,int r,int d)
{
if(l==L&&r==R)
{
mi[id]+=d;
tag[id]+=d;
return;
}
pushdown(id);
int Mid=L+R>>1;
if(r<=Mid) ins(ls,L,Mid,l,r,d);
else if(l>Mid) ins(rs,Mid+1,R,l,r,d);
else ins(ls,L,Mid,l,Mid,d),ins(rs,Mid+1,R,Mid+1,r,d);
mi[id]=min(mi[ls],mi[rs]);
}
int query(int id,int l,int r,int s)
{
if(l==r) return mi[id]>=s?l:l+1;
pushdown(id);
int mid=l+r>>1;
if(mi[rs]>=s) return query(ls,l,mid,s);
else return query(rs,mid+1,r,s);
}
int main()
{
scanf("%d%lf",&n,&k);
for(int i=1;i<=n;i++) scanf("%d",d+i),par[i]=1.0*i/k+eps;
std::sort(d+1,d+1+n);
int m=0,p=1;b[p]=d[n];
for(int i=1;i<=n;i++) if(d[i]!=d[i-1]) ++m;
for(int i=n-1;~i;i--)
if(d[i]!=d[i+1])
{
yuu[p]=n-i;
b[++p]=d[i];
}
build(1,1,m);
for(int i=n;i;i--) ++siz[i],siz[par[i]]+=siz[i];
for(int i=1;i<=n;i++)
{
if(par[i]&&par[i]!=par[i-1]) ins(1,1,m,pos[par[i]],m,siz[par[i]]-1);
pos[i]=query(1,1,m,siz[i]);
printf("%d ",b[pos[i]]);
ins(1,1,m,pos[i],m,-siz[i]);
}
return 0;
}
2019.3.18
「九省联考 2018」IIIDX 解题报告的更多相关文章
- loj2472 「九省联考 2018」IIIDX
ref #include <algorithm> #include <iostream> #include <cstdio> using namespace std ...
- LOJ #2473. 「九省联考 2018」秘密袭击
#2473. 「九省联考 2018」秘密袭击 链接 分析: 首先枚举一个权值W,计算这个多少个连通块中,第k大的数是这个权值. $f[i][j]$表示到第i个节点,有j个大于W数的连通块的个数.然后背 ...
- Loj #2479. 「九省联考 2018」制胡窜
Loj #2479. 「九省联考 2018」制胡窜 题目描述 对于一个字符串 \(S\),我们定义 \(|S|\) 表示 \(S\) 的长度. 接着,我们定义 \(S_i\) 表示 \(S\) 中第 ...
- LOJ 2743(洛谷 4365) 「九省联考 2018」秘密袭击——整体DP+插值思想
题目:https://loj.ac/problem/2473 https://www.luogu.org/problemnew/show/P4365 参考:https://blog.csdn.net/ ...
- 【LOJ】#2479. 「九省联考 2018」制胡窜
题解 老了,国赛之前敲一个后缀树上LCT和线段树都休闲的很 现在后缀树上线段树合并差点把我写死 主要思路就是后缀树+线段树合并+容斥,我相信熟练的OIer看到这已经会了 但就是不想写 但是由于我过于老 ...
- LOJ#2471「九省联考 2018」一双木棋 MinMax博弈+记搜
题面 戳这里 题解 因为每行取的数的个数是单调不增的,感觉状态数不会很多? 怒而记搜,结果过了... #include<bits/stdc++.h> #define For(i,x,y) ...
- [loj 2478][luogu P4843]「九省联考 2018」林克卡特树
传送门 Description 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一 ...
- @loj - 2478@「九省联考 2018」林克卡特树
目录 @description@ @solution@ @part - 1@ @part - 2@ @accepted code@ @details@ @description@ 小 L 最近沉迷于塞 ...
- [luogu] P4364 [九省联考2018]IIIDX(贪心)
P4364 [九省联考2018]IIIDX 题目背景 Osu 听过没?那是Konano 最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在,他在世界知名游戏公司KONMAI ...
随机推荐
- java开发中使用枚举表述数据字典
一.用枚举表述数据字典 1.代码: package com.inspire.jdk.caculate; /** * Created by yaming * 用枚举表述常量数据字段 */ public ...
- Eclipse支持文件UTF-8编码
Eclipse修改编码格式_百度经验https://jingyan.baidu.com/article/2009576193ee38cb0721b416.html 这篇最棒 如何为eclipse中的文 ...
- 【Python3练习题 012】 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
ASCII 码表的对应值,知道 ord('a') 能将字符 'a' 转化为 ASCII 码表上对应的数值,就可以了.其中,数字 0-9 对应的码值为 48-57,大写字母 A-Z 对应 65-90,小 ...
- nodejs配置nginx 以后链接mongodb数据库
服务器 :windows server2008 R2 反向代理 :nginx 1.15.1 for window 64位 数据库:mongodb 4 64位 使用框架express 首先下载nodej ...
- php 对象赋值后改变成员变量影响赋值对象
话不多说看代码 打印结果 对obj1的操作 直接影响了obj2 , 对obj2的操作 直接影响了obj1
- Oracle undo 表空间不可用
由于某次不小心操作,在切换表空间时没有成功,由于把undo的配置参数 undo_management值设置为MANUAL所以在启动数据库时没有报任何错误,但是给表插入数据时报错了,回滚段不可用的错误. ...
- 微信小程序错误码参考大全
开发过程中,会遇到很多微信返回的状态码,鬼知道代表什么意思,现在好了,整理总结了一份状态码,方便大家. 转载:http://www.yiyongtong.com/archives/view-1856- ...
- Docker部署运行springboot项目,并使用Dockerfile制作镜像
前言: 本来是要搭建一个自动化部署分布式项目的服务器平台的,使用jenkins+k8s+ELK+springboot把一个简单的springboot项目给搞起来,由于工程太大,先分开把每个技术组件单独 ...
- 解决ERROR 1130: Host '192.168.11.1' is not allowed to connect to this MySQL
使用navicat进行远程登录MySQL时,报出 ERROR 1130: Host '192.168.11.1' is not allowed to connect to this MySQL se ...
- 使用npm安装一些包失败了,更换npm源
镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set registry https://regist ...