jzoj6307-安排【归并排序】

正题


题目大意

一个目前序列,一个目标序列,每次可以选择一个区间交换区间最大值和最小值。

询问在345678345678345678步内将目前序列转换回目标序列的方案(输出该方案)。


解题思路

我们考虑归并排序,对于两个升序的序列,我们考虑如何合并为一个序列。

我们从中间往两边扩张,我们发现在我们可以找到一个kkk使得任意x≤kx\leq kxkamid−k>amid+k+1a_{mid-k}>a_{mid+k+1}amidk>amid+k+1
我们找到最大的kkk并让i=mid−k,j=mid+k+1i=mid-k,j=mid+k+1i=midk,j=mid+k+1这时我们就有这样的
在这里插入图片描述
我们就有这样的一个序列,我们考虑将i∼Midi\sim MidiMidMid+1∼jMid+1\sim jMid+1j翻转(显然可以做到)
在这里插入图片描述
然后再将i∼ji\sim jij这段进行翻转就有
在这里插入图片描述
然后这个时候必定有L∼iL\sim iLi中任意一个数都小于等于j∼Rj\sim RjR中的数。

所以这个时候我们在将L∼MidL\sim MidLMidi−1i-1i1为新的MidMidMid再次进行新的排序,然后Mid∼RMid\sim RMidRjjj为新MidMidMid再次进行排序即可。

这时我们发现对于一次排序需要的次数约为nlog⁡2n2\frac{n\log^2 n}{2}2nlog2n,可以通过本题。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5000;
int n,a[N],x[N<<7],y[N<<7],tot,cnt;
void solve(int l,int mid,int r)
{if(mid<l||mid>=r||l==r) return;int i=mid,j=mid+1;while(i>l&&j<r&&a[i-1]>a[j+1]) i--,j++;if(i[a]>j[a]){for(int k=i,p=mid;k<p;k++,p--)swap(k[a],p[a]),x[++tot]=k,y[tot]=p;for(int k=mid+1,p=j;k<p;k++,p--)swap(k[a],p[a]),x[++tot]=k,y[tot]=p;for(int k=i,p=j;k<p;k++,p--)swap(k[a],p[a]),x[++tot]=k,y[tot]=p;solve(l,i-1,mid);solve(mid+1,j,r);}return;
}
void Merge(int l,int r)
{if(l==r) return;int mid=(l+r)/2;Merge(l,mid);Merge(mid+1,r);solve(l,mid,r);return;
}
int main()
{freopen("swap.in","r",stdin);freopen("swap.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&i[a]);Merge(1,n);cnt=tot;for(int i=1;i<=n;i++)scanf("%d",&i[a]);Merge(1,n);printf("%d\n",tot);for(int i=1;i<=cnt;i++)printf("%d %d\n",x[i],y[i]);for(int i=tot;i>cnt;i--)printf("%d %d\n",x[i],y[i]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core 2.1 Preview 1发布:更快的构建性能

今天&#xff0c;我们宣布发布 .NET Core 2.1 Preview 1。这是 .NET Core 2.1 的第一个公开发布。我们有很大的改进希望分享出来&#xff0c;并且渴望得到您的反馈意见&#xff0c;无论是在评论中还是在github中dotnet/core #1297ASP.NET Core 2.1 Preview 1 和 Entity Framewo…

Spark SQL(七)之基于用户的相似度公式

一、基于用户的Jaccard相似度公式 其中&#xff0c;u、v表示任意两个用户&#xff0c;N(u)表示用户u喜欢的物品集合,N(v)表示用户v喜欢物品的集合。 代码 public class UserCFApp {public static void main(String[]args){SparkConf sparkConf new SparkConf();sparkConf.se…

欢乐纪中A组赛【2019.8.17】

前言 前几天题目没改完(好难QvQQvQQvQ)&#xff0c;然后这几天ZZYZZYZZY和WHFWHFWHF去广州二中了 然后我是菜鸡&#xff0c;今天暴力写挂了QAQQAQQAQ&#xff0c;T2T2T2少判断了个东西少了808080 成绩 懒得写只放自己的了(反正垫底) Rank51,20ptsRank51,20ptsRank51,20pts 正…

BXUG第11期活动

分享主题&#xff1a;Xamarin Azure 微软云加端移动应用技术架构分享者&#xff1a;周岳 微软MVP分享主题&#xff1a;从设计图到最终界面- Xamarin跨平台界面最佳实践分享者: 程文锋 视高盛景分享主题&#xff1a;基于VSTS的App DevOps分享者&#xff1a; 安庭庭 张浩 视高…

Spark SQL(八)之基于物品的相似度公式

一、基于物品的Jaccard相似度公式 其中&#xff0c;i、j表示任意两个物品&#xff0c;N(i)表示喜欢物品i的用户数&#xff0c;N(j)表示喜欢物品j的用户数。 代码&#xff1a; public class ItemCFApp {public static void main(String[]args){SparkConf sparkConf new Spark…

CF1200D-White Lines【二维前缀和】

正题 题目链接:https://www.luogu.org/problem/CF1200D 题目大意 一个黑白组成的n∗nn*nn∗n矩阵&#xff0c;然后可以选择将k∗kk*kk∗k的覆盖为白色&#xff0c;然后求有多少白线(整行或整列都是白色)。 解题思路 对于每一行或每一列可以变成白线的话那么可行范围一定是一…

ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL

ASP.NET CORE MVC 中&#xff0c;默认的 Route 模板是&#xff1a; /{controller}/{action} 。我们可以通过开启 URL 小写转换将 URL 变为小写&#xff0c;但此方式在 Controller 或者 Action 为一个词组时&#xff0c;生成的 URL 并不友好。假设我们有 UserController 和 Add…

Spark SQL(九)之基于用户的推荐公式

一、基于用户的推荐公式 其中&#xff0c;S(u,K)表示与用户u最相似的K个用户&#xff0c;N(i)代表喜欢物品i的用户集合&#xff0c;rm表示用户v对物品i的评分。 二、代码 public class UserCFRecommendApp {public static void main(String[]args){SparkConf sparkConf new S…

jzoj6309-完全背包【贪心,背包】

正题 题目大意 完全背包&#xff0c;不过容量特别大。 解题思路 然后我们可以先做一个1∼200001\sim 200001∼20000的背包&#xff0c;然后枚举一个大小&#xff0c;然后将这个大小填入背包知道无法填入为止&#xff0c;然后剩下的空位在再一次背包就好。 codecodecode #incl…

拥抱.NET Core系列:MemoryCache 缓存过期

MSCache项目MSCache目前最新的正式版是 2.0.0&#xff0c;预览版是2.1.0&#xff0c;会与.NETCore 2.1一起发布。本篇用了2.0.0版本开源在GitHub上&#xff0c;仓库地址是&#xff1a;https://github.com/aspnet/CachingNuGet地址为&#xff1a;https://www.nuget.org/packages…

Spark SQL(十)之基于物品的推荐公式

一、基于物品的推荐公式 其中&#xff0c;S(j,K)表示与物品j最相似的K个物品&#xff0c;N(u)表示用户u喜欢的物品集合&#xff0c;Rui表示用户u对物品i的评分。 二、代码 public class ItemCFRecommendApp {public static void main(String[]args){SparkConf sparkConf new …

jzoj6308-中间值【分治】

正题 题目大意 两个序列不降a,ba,ba,b&#xff0c;每次可以修改或询问[l1,r1,l2,r2][l_1,r_1,l_2,r_2][l1​,r1​,l2​,r2​]要求输出将序列aaa的l1∼r1l_1\sim r_1l1​∼r1​和bbb的l2∼r2l_2\sim r_2l2​∼r2​部分合起来然后求中位数。 解题思路 我们考虑分治&#xff0c;…

MongoDB嵌套数组,多维数组查询

一、嵌套数组 数据&#xff1a; {"arrays": [{"keyArrays": [{"key": "index","key2": "index2"},{"key": "index1","key2": "index2"}]}] } mongo语法 db.collecti…

ASP.NET Core Razor 页面使用教程

ASP.NET Core Razor 页面作为 ASP.NET Core 2.0的一部分发布&#xff0c;它是基于页面的全新的Web开发框架。如果您想学习如何使用 ASP.NET Core Razor 页面&#xff0c;可以访问微软的官方站点https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/razor-page…

jzoj6306-Sequence【线性筛,积性函数,数论】

正题 题目大意 定义函数f(x)f(x)f(x)表示有多少长度为nnn的序列使得其中全都是xxx的约束&#xff0c;然后每个序列的贡献是这个序列的gcdgcdgcd再gcdgcdgcd上一个BBB。 给出n,m,Bn,m,Bn,m,B&#xff0c;求∑i1mf(i)\sum_{i1}^mf(i)∑i1m​f(i)。 解题思路 我们发现fff是一个…

MongoDb连接表的查询

一、外键关联 a_table关联b_table通过a_table的a_fieldb_table的b_field&#xff0c;在a_table生成lookup_field字段存储关联的b_table数据 MongoOperations mongoOperations ...;LookupOperation agg Aggregation.lookup("b_table", "a_field","…

如何面试.NET/ASP.NET工程师?

2018-2-28 更新&#xff1a;距离这篇回答发布已经五年过去了&#xff0c;最近还经常受到关注。技术本身在发展&#xff0c;这令我感到有必要来更新一下&#xff0c;希望对新看到的朋友有用。对于服务器上的 .NET 技术&#xff0c;最新的发展当然是 .NET Core 了&#xff0c;作为…

欢乐纪中A组赛【2019.8.18】

前言 有一个暴力写挂了QVQQVQQVQ 成绩 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC111111(J−3)LRZ(J-3)LRZ(J−3)LRZ140140140100100100303030101010191919(J−3)WYC(J-3)WYC(J−3)WYC120120120100100100101010101010262626(J−3)HZB(J-3)HZB(J−3)HZB100100100…

Asp.Net Core 2.1+的视图缓存(响应缓存)

响应缓存Razor 页与 ASP.NET 核心 2.0 中不支持。 此功能将支持ASP.NET 核心 2.1 版本。在老的版本的MVC里面&#xff0c;有一种可以缓存视图的特性(OutputCache)&#xff0c;可以保持同一个参数的请求&#xff0c;在N段时间内&#xff0c;直接从mvc的缓存中读取&#xff0c;不…

MongoDB投影字段

一、投影表字段 投影只包含a_field和b_field字段 Aggregation aggregation Aggregation.newAggregation(Aggregation.project("a_field", "b_field")); List<Map> list mongoOperations.aggregate(aggregation, "table", Map.class).ge…