loj2472 「九省联考 2018」IIIDX
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int n, a[500005], fa[500005], siz[500005], cnt[500005], ans[500005];
int hmn[500005];
double k;
bool vis[500005];
struct SGT{
	int val[2000005], tag[2000005];
	void build(int o, int l, int r){
		if(l==r)	val[o] = l;
		else{
			int mid=(l+r)>>1;
			int lson=o<<1;
			int rson=lson|1;
			if(l<=mid)	build(lson, l, mid);
			if(mid<r)	build(rson, mid+1, r);
			val[o] = min(val[lson], val[rson]);
		}
	}
	void pushDown(int o, int lson, int rson){
		tag[lson] += tag[o];
		tag[rson] += tag[o];
		val[lson] += tag[o];
		val[rson] += tag[o];
		tag[o] = 0;
	}
	void update(int o, int l, int r, int x, int y, int k){
		if(l>=x && r<=y){
			val[o] += k;
			tag[o] += k;
		}
		else{
			int mid=(l+r)>>1;
			int lson=o<<1;
			int rson=lson|1;
			if(tag[o])	pushDown(o, lson, rson);
			if(x<=mid)	update(lson, l, mid, x, y, k);
			if(mid<y)	update(rson, mid+1, r, x, y, k);
			val[o] = min(val[lson], val[rson]);
		}
	}
	int query(int o, int l, int r, int x){
		if(l==r)	return val[o]>=x?l:l+1;
		else{
			int mid=(l+r)>>1;
			int lson=o<<1;
			int rson=lson|1;
			if(tag[o])	pushDown(o, lson, rson);
			if(val[rson]>=x)	return query(lson, l, mid, x);
			else	return query(rson, mid+1, r, x);
		}
	}
}sgt;
bool cmp(int a, int b){
	return a>b;
}
int main(){
	cin>>n>>k;
	for(int i=1; i<=n; i++){
		siz[i] = 1;
		fa[i] = i / k;
		scanf("%d", &a[i]);
	}
	sort(a+1, a+1+n, cmp);
	for(int i=n; i; i--){
		siz[fa[i]] += siz[i];
		if(a[i]!=a[i+1])	cnt[i] = 0;
		else	cnt[i] = cnt[i+1] + 1;
	}
	sgt.build(1, 1, n);
	for(int i=1; i<=n; i++){
		if(fa[i] && !vis[fa[i]]){
			sgt.update(1, 1, n, ans[fa[i]], n, siz[fa[i]]-1);
			vis[fa[i]] = true;
		}
		int x=sgt.query(1, 1, n, siz[i]);
		x += cnt[x]; hmn[x]++; x -= hmn[x] - 1;
		ans[i] = x;
		sgt.update(1, 1, n, x, n, -siz[i]);
	}
	for(int i=1; i<=n; i++)
		printf("%d ", a[ans[i]]);
	printf("\n");
	return 0;
}
												
											loj2472 「九省联考 2018」IIIDX的更多相关文章
- 「九省联考 2018」IIIDX 解题报告
		
「九省联考 2018」IIIDX 这什么鬼题,送的55分要拿稳,实测有60? 考虑把数值从大到小摆好,每个位置\(i\)维护一个\(f_i\),表示\(i\)左边比它大的(包括自己)还有几个数可以选 ...
 - 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 最近沉迷于塞 ...
 - [九省联考2018]秘密袭击coat
		
[九省联考2018]秘密袭击coat 研究半天题解啊... 全网几乎唯一的官方做法的题解:链接 别的都是暴力.... 要是n=3333暴力就完了. 一.问题转化 每个联通块第k大的数,直观统计的话,会 ...
 
随机推荐
- 关于BaseServlet
			
BaseServlet 是项目中所有servlet的父类,作用是为了让一个servlet可以同时处理多个请求,因为我们之前比如说完成对于商品的增删改查的时候,每一个需求就要创建一个servlet,这样 ...
 - 05、Spark
			
05.Spark shell连接到Spark集群执行作业 5.1 Spark shell连接到Spark集群介绍 Spark shell可以连接到Spark集群,spark shell本身也是spar ...
 - 解压war包
			
unzip cat-alpha-3.0.0.war -d /tmp/test 说明:-d指定解压的路径和文件,文件名不存在会自动创建
 - POJ-1990 MooFest---两个树状数组
			
题目链接: https://vjudge.net/problem/POJ-1990 题目大意: 一群牛参加完牛的节日后都有了不同程度的耳聋,第i头牛听见别人的讲话,别人的音量必须大于v[i],当两头牛 ...
 - C++STL之set集合容器
			
set集合容器 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构, 在 插入元素时, 它会自动调整二叉树的排列, 把该元素放到适当的位置, 以确保每个子树根节点的键 ...
 - 剑指offer 33 把数组排成最小的数
			
错误代码 class Solution { public: int FindGreatestSumOfSubArray(vector<int> array) { int length = ...
 - SWFUpload 参数详解
			
属性 类型 默认值 描述 upload_url String 处理上传文件的服务器端页面的url地址,可以是绝对地址,也可以是相对地址,当为相对地址时相对的是当前代码所在的文档地址 preserv ...
 - Yarn下分片和分块源代码分析
			
public class FileSplit extends InputSplit implements Writable { private Path file; private long star ...
 - string find简析
			
原文链接 #include <string>#include <iostream>using namespace std; void main(){ ////find函数返回类 ...
 - JS实现Promise原理
			
promise是用来解决Js中的异步问题的,js中所有的异步可从callback → promise → generator + co = async + await 其实所有的都是callback的 ...