不断的在cur的后面找最大的符合条件的数扔到cur的前面。 用线段树维护操作就可以了。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
#define lson l,mid,x<<1
#define rson mid+1,r,x<<1|1
int read(){
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int nmax=1e5+5;
int a[nmax],mx[nmax<<2],pos[nmax<<2],sm[nmax<<2];
void pushup(int x){
int a=x<<1,b=x<<1|1;
sm[x]=sm[a]+sm[b];
if(mx[a]<mx[b]) mx[x]=mx[b],pos[x]=pos[b];
else mx[x]=mx[a],pos[x]=pos[a];
}
void build(int l,int r,int x){
if(l==r){
mx[x]=a[l],pos[x]=l,sm[x]=1;return ;
}
int mid=(l+r)>>1;build(lson);build(rson);
pushup(x);
}
struct node{
int mx,pos;
node(int mx,int pos):mx(mx),pos(pos){};
node(){};
};
int query(int l,int r,int x,int p){
if(l==r) return l;
int mid=(l+r)>>1;
if(p<=sm[x<<1]) return query(lson,p);
return query(rson,p-sm[x<<1]);
}
int query_sm(int l,int r,int x,int tl,int tr){
if(tl<=l&&tr>=r) return sm[x];
int mid=(l+r)>>1,ans=0;
if(tl<=mid) ans+=query_sm(lson,tl,tr);
if(tr>mid) ans+=query_sm(rson,tl,tr);
return ans;
}
node query_mx(int l,int r,int x,int tl,int tr){
if(tl<=l&&tr>=r) return node(mx[x],pos[x]);
int mid=(l+r)>>1;node ans=node(0,0),t;
if(tl<=mid) ans=query_mx(lson,tl,tr);
if(tr>mid) {
t=query_mx(rson,tl,tr);
if(t.mx>ans.mx) ans=t;
}
return ans;
}
void del(int l,int r,int x,int p){
if(l==r) mx[x]=pos[x]=sm[x]=0;
else{
int mid=(l+r)>>1;
p<=mid?del(lson,p):del(rson,p);
pushup(x);
}
}
int main(){
int n=read(),m=read();
rep(i,1,n) a[i]=read();
build(1,n,1);
int cur=1,u,v,d,tmp,temp,cnt=0;node o;
rep(i,1,n){
if(++cnt>n) break;
u=query(1,n,1,m+1);
o=query_mx(1,n,1,i,u);
printf("%d\n",o.mx);
del(1,n,1,o.pos);
m-=query_sm(1,n,1,1,o.pos);
if(o.pos!=i) --i;
}
return 0;
}

  

基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 收藏
 关注
给出一个1至N的排列,允许你做不超过K次操作,每次操作可以将相邻的两个数交换,问能够得到的字典序最大的排列是什么?

例如:N = 5, {1 2 3 4 5},k = 6,在6次交换后,能够得到的字典序最大的排列为{5 3 1 2 4}。
Input
第1行:2个数N, K中间用空格分隔(1 <= N <= 100000, 0 <= K <= 10^9)。
第2至N + 1行:每行一个数i(1 <= i <= N)。
Output
输出共N行,每行1个数,对应字典序最大的排列的元素。
Input示例
5 6
1
2
3
4
5
Output示例
5
3
1
2
4

51nod1364 最大字典序排列的更多相关文章

  1. [51nod-1364]最大字典序排列

    [51nod-1364]最大字典序排列 Online Judge:51nod-1364 Label:线段树,树状数组,二分 题目描述 题解: 根据题意很容易想到60%数据的\(O(N^2logN)\) ...

  2. 51Node 1364--- 最大字典序排列(树状数组)

    51Node  1364--- 最大字典序排列(树状数组) 1364 最大字典序排列 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个1至N ...

  3. 51nod 1364 最大字典序排列(线段树)

    1364 最大字典序排列基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个1至N的排列,允许你做不超过K次操作,每次操作可以将相邻的两个数交换,问能够得到的字 ...

  4. [Swift-2019力扣杯春季决赛]2. 按字典序排列最小的等效字符串

    给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...

  5. [leetcode](4.21)2. 按字典序排列最小的等效字符串

    给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...

  6. hdu1027(n个数的按字典序排列的第m个序列)

    题目信息:给出n.m,求n个数的按字典序排列的第m个序列 http://acm.hdu.edu.cn/showproblem.php? pid=1027 AC代码: /**  *全排列的个数(次序) ...

  7. poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )

    ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6229   Accepted: 3737 Descript ...

  8. 46. 47. Permutations and Permutations II 都适用(Java,字典序 + 非字典序排列)

    解析: 一:非字典序(回溯法) 1)将第一个元素依次与所有元素进行交换: 2)交换后,可看作两部分:第一个元素及其后面的元素: 3)后面的元素又可以看作一个待排列的数组,递归,当剩余的部分只剩一个元素 ...

  9. POJ-1318(list.sort()输出不为字典序,map才是按字典序排列)

    #include<iostream> #include<string> #include<list> #include<map> #include< ...

随机推荐

  1. 理解Session的几种模式

    一.写在前面 我们在使用ASP.NET开发的过程中,有时会进行数据存储以实现请求前后的状态保持(HTTP是无状态保持的协议),而Session作为一种快速简单易于实现的方式被我们经常使用,当然如果出于 ...

  2. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  3. Sqli-labs less 28a

    Less-28a 本关与28基本一致,只是过滤条件少了几个. http://127.0.0.1/sqllib/Less-28a/?id=100%27)unIon%0bsElect%0b1,@@base ...

  4. HDU5002 Tree(LCT)

    今天做了一道LCT模板题之后忽然间好像记起来LCT的模板怎么用了,于是就把上次网络赛的一道LCT补一下.典型的删边,加边操作,还有路径加和路径set为一个数.维护的是路径第二大以及它有多少个,后来想想 ...

  5. 大一暑假为期五周的ACM实验室培训结束了(2013.8.24)

    没想到,我的大学里第一个暑假,9周的时间只有最初的两周在家待着,接下来的7周将会在学校度过. 说真的,这是我上学以来,第一次真正好好利用的假期.在这五周里,周一.三.五下午学长都会给我们讲点知识,之后 ...

  6. HDU 4169 树形DP

    Wealthy Family Problem Description While studying the history of royal families, you want to know ho ...

  7. ps 快捷键

    1.前景色填充ALT+DEL 2.背景色填充CTRL+DEL 3.按D键可以以恢复默认的前景色(黑).背景色(白). 4.按X键可以切换前景色.背景色.

  8. WordPress主题制作教程5:循环

    wordpress循环分两种,一种是自定义循环,一种是默认循环. 自定义循环:根据指定参数进行实例化 调用所有页面,post_type值:page对应页面,post对应文章 <?php $arg ...

  9. HTML5文档结构语义:页眉的header和hgroup标签使用

    HTML5提供了新的结构元素——例如header.hgroup.article.section.footer.nav等来定义网页,将使网页结构更加简洁严谨,语义更加结构化,而不用迂回通过class或i ...

  10. iOS iphone屏幕分析(岂止而大)

    在写本文前,我必须介绍几点内容:第一点:屏幕上面显示的内容多少和屏幕的尺寸大小无关第二点:屏幕上面显示的内容多少和分辨率完全无关第三点:屏幕上面显示的内容多少和屏幕尺寸.屏幕分辨率.PPI等都是无关的 ...