fjwc2019 D2T3 排序(堆)
贴一段ppt
考虑模拟出这个算法进行k轮(即外层的i循环到k)时的序列,之后再暴力模拟零散的步。
考虑这个算法在01序列上的表现,k轮后实际上就是将最开始的不超过k个0放到序列开头。
考虑把序列转化成01序列,我们只要从1~n枚举x,然后把<=x的记为0,>x的记为1就行了,新增的那个0就是x的位置。
我们用priority_queue维护序列中当前前k个0的位置,每次考虑新的那个0的位置。
如果它为前k个,那么被弹出去的那个元素就是现在x的位置。如果它不为前k个,那么x的位置保持不变。
因为这题太过神仙我不知道咋讲了,感性理解吧(逃
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
namespace io {
const int SIZE = ( << ) + ;
char ibuf[SIZE], *iS, *iT, obuf[SIZE], *oS = obuf, *oT = oS + SIZE - , c, qu[]; int f, qr;
// getchar
#define gc() (iS == iT ? (iT = (iS = ibuf) + fread (ibuf, 1, SIZE, stdin), (iS == iT ? EOF : *iS ++)) : *iS ++)
// print the remaining part
inline void flush () {
fwrite (obuf, , oS - obuf, stdout);
oS = obuf;
}
// putchar
inline void putc (char x) {
*oS ++ = x;
if (oS == oT) flush ();
}
// input a signed integer
template <class I>
inline void gi (I &x) {
for (f = , c = gc(); c < '' || c > ''; c = gc()) if (c == '-') f = -;
for (x = ; c <= '' && c >= ''; c = gc()) x = x * + (c & ); x *= f;
}
// print a signed integer
template <class I>
inline void print (I &x) {
if (!x) putc (''); if (x < ) putc ('-'), x = -x;
while (x) qu[++ qr] = x % + '', x /= ;
while (qr) putc (qu[qr --]);
}
//no need to call flush at the end manually!
struct Flusher_ {~Flusher_(){flush();}}io_flusher_;
}
using io :: gi;
using io :: putc;
using io :: print;//题目附送的快读
using namespace std;
#define N 1000005
priority_queue <int> h;
int n,x,p[N],a[N]; long long k;
void work(int x){
for(int i=;i<=n;++i) p[a[i]]=i;
for(int i=;i<x;++i) a[i]=i,h.push(p[i]);
for(int i=x;i<=n;++i){
if(h.top()<p[i]) a[p[i]]=i;//后面的一段不受影响
else{
a[h.top()]=i;
h.pop(); h.push(p[i]);
}//把i放到最右边的位置上
}
}
int main(){
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
gi(n);gi(k);
for(int i=;i<=n;++i) gi(a[i]);
for(int i=;i<=n;++i){
if(k>n-i) k-=n-i;
else{
if(i>) work(i);
for(int j=i+;j<=i+k;++j)//模拟零散步
if(a[j]<a[i]) swap(a[i],a[j]);
for(int j=;j<=n;++j) print(a[j]),putc(' ');
return ;
}
}
}
fjwc2019 D2T3 排序(堆)的更多相关文章
- hihoCoder 1391 Countries 【预处理+排序+堆】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)
#1391 : Countries 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There are two antagonistic countries, countr ...
- 【bzoj4010】[HNOI2015]菜肴制作 拓扑排序+堆
题目描述 给你一张有向图,问:编号-位置序(即每个编号的位置对应的序列)最小(例如1优先出现在前面,1位置相同的2优先出现在前面,以此类推)的拓扑序是什么? 输入 第一行是一个正整数D,表示数据组数. ...
- 洛谷P4165 [SCOI2007]组队(排序 堆)
题意 题目链接 Sol 跟我一起大喊:n方过百万,暴力踩标算! 一个很显然的思路是枚举\(H, S\)的最小值算,复杂度\(O(n^3)\) 我们可以把式子整理一下,变成 \[A H_i + B S_ ...
- [AGC010E] Rearranging [拓扑排序+堆]
题面 传送门 思路 首先,一个显然的结论是:Alice调整过后的序列中任意两个不互质的数的相对顺序无法改变 那么我们可以以这个性质为突破口 我们在两个不互质的权值的点之间连一条边(没错这是个图论题!! ...
- BZOJ4010[HNOI2015]菜肴制作——拓扑排序+堆
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴 ...
- BZOJ3832: [Poi2014]Rally(拓扑排序 堆)
题意 题目链接 Sol 最直观的思路是求出删除每个点后的最长路,我们考虑这玩意儿怎么求 设\(f[i]\)表示以\(i\)结尾的最长路长度,\(g[i]\)表示以\(i\)开始的最长路长度 根据DAG ...
- bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】
有个容易混的概念就是第一问的答案不是k[i]字典序最小即可,是要求k[i]大的尽量靠后,因为这里前面选的时候是对后面有影响的(比如两条链a->b c->d,ka=4,kb=2,kc=3,k ...
- c++堆
c++ reference: http://www.cplusplus.com/reference/algorithm/make_heap/ heap并不属于STL容器组件,它分为 max heap ...
- hihoCoder 1391 Countries【预处理+排序+优先队列】2016北京网络赛
题目:http://hihocoder.com/problemset/problem/1391 题目大意: A和B两个国家互射导弹,每个国家都有一个防御系统,在防御系统开启的时间内可以将到达本国的导弹 ...
随机推荐
- [Java] Frequently used method or solutions for issues
模板: Split string into parts based on new line in java Solution: Reference is here. 1) get out of t ...
- iOS UI基础-19.0 UICollectionView
直接上代码,说明请看注释吧 1.继承三个代理 UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateF ...
- 胸片和CT断层图像是怎么来的?
本文作者系医科大学青年教师,关注公众号"计算机视觉life"菜单栏回复"医学" 进群交流 如何得到CT断层图像? 相信小伙伴体检的时候都拍过胸片,假如哪个不幸的 ...
- cocos2d 利用cocosStudio制作合图(plist与png)
- 字符串转化为int数组
String a = "1,2,3,4,5,6" String str[] = a.split(","); int array[] = new int[str. ...
- C++调用openssl库生成RSA加密秘钥对
直接上代码.默认生成的是pkcs#1格式 // ---- rsa非对称加解密 ---- // #define KEY_LENGTH 1024 // 密钥长度 #define PUB_KEY_FILE ...
- C#日期格式字符串的相互转换
方法一:Convert.ToDateTime(string) string格式有要求,必须是yyyy-MM-dd hh:mm:ss ================================== ...
- 第四章 CSS3概述
1.CSS3新增常用选择器(1)结构性伪类选择器:root 文档根元素 :nth-child(n) 第N个子元素"first-child 第一个元素 :kast-child 最后一个子元素 ...
- php 静态方法 静态属性 和 普通方法 普通属性区别
1,实例属性,是每个对象都可以不一样的数据,也是每个对象都“独自拥有”的数据: 2,静态属性,他不属于任何一个对象,而只属于该类本身,也可以理解为为所有对象所共有的数据:
- Self hosted OWIN 绑定地址127.0.0.1,外网无法访问
static void Main() { string baseAddress = "http://localhost:4004/"; ...