问题 C: 序列交换

时间限制: 1 Sec  内存限制: 128 MB
提交: 914  解决: 48
[提交] [状态] [命题人:jsu_admin]

题目描述

给一个 1 到 n 的排列,每次可以交换相邻两个数,问使用最少操作次数使得序列递增的方案是否唯一。

输入

多组输入,每组一个数n(1<=n<=10^5),然后是一个1~n的排列。

输出

方案唯一输出Yes,否则输出No。

样例输入 Copy

1
1
2
2 1
3
3 2 1

样例输出 Copy

Yes
Yes
No
 

比赛时数据出弱了,赛后加强了一下

为了使操作次数最少,每次都会交换相邻的逆序对。如果某时刻同时出现两个相邻逆 序对,方案数就不唯一了。不难发现,这个过程只能是把一个数不断向右挪到它最后    在

的位置上。这意味着最长上升子序列长度 ≥ n − 1。

 #include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
//#define DEBUG
using namespace std;
typedef long long ll;
//typedef __int128 lll;
const int N=+;
const int MOD=1e9+;
const double PI = acos(-1.0);
const double EXP = 1E-;
const int INF = 0x3f3f3f3f;
int t,n,m,k,q;
int a[N];
int b[N];
int main()
{ while(~scanf("%d",&n)){
t=;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
if(i!=&&a[i]<a[i-]){
t++;
}
}
if(t==||t==){
if(t==){
for(int i=;i<=n;i++){
if(a[i]<a[i-]){
swap(a[i],a[i-]);
//break;
}
}
for(int i=;i<=n;i++){
if(a[i]<a[i-]){
t=;
break;
}
}
q=;
for(int i=n;i>=;i--){
if(b[i]<b[i-]){
swap(b[i],b[i-]);
//break;
}
}
for(int i=;i<=n;i++){
if(b[i]<b[i-]){
q=;
break;
}
}
if(t||q){
cout << "Yes" << endl;
}else{
cout << "No" << endl;
}
}else{
cout << "Yes" << endl;
}
}else{
cout << "No" << endl;
}
} return ;
}

问题 C: 序列交换的更多相关文章

  1. [HNOI2009]双递增序列(动态规划,序列dp)

    感觉这个题还蛮难想的. 首先状态特别难想.设\(dp[i][j]\)表示前i个数,2序列的长度为j的情况下,2序列的最后一个数的最小值. 其中1序列为上一个数所在的序列,2序列为另外一个序列. 这样设 ...

  2. Recover Binary Search Tree

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  3. Modbus Poll master-slave测试 Dtech USB转485(worldsing 笔记)

    1,简介 网站地址:http://www.modbustools.com/ 该网站提供了几个软件工具,可以运行于windows 2000/XP/Vista/7环境下,用来测试和仿真Modebus设备. ...

  4. LeetCode: Recover Binary Search Tree 解题报告

    Recover Binary Search Tree Two elements of a binary search tree (BST) are swapped by mistake. Recove ...

  5. modbus调试工具

    1,简介 网站地址:http://www.modbustools.com/ 该网站提供了几个软件工具,可以运行于windows 2000/XP/Vista/7环境下,用来测试和仿真Modebus设备. ...

  6. UVA-1611 Crane (构造)

    题目大意:给一个1~n的序列,每次操作可以把长度为偶数的序列交换前一半和后一半的位置.求出将这个序列变成升序的步骤. 题目分析:构造求解. 代码如下: # include<iostream> ...

  7. 【逆序对相关/数学】【P1966】【NOIP2013D1T2】 火柴排队

    传送门 Description 涵涵有两盒火柴,每盒装有 $n$ 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:$ \sum ...

  8. Python全栈工程师(每周总结:2)

     ParisGabriel   感谢 大家的支持                                                               每天坚持 一天一篇 点个订 ...

  9. Python全栈工程师(函数嵌套、变量作用域)

    ParisGabriel   感谢 大家的支持                                                               每天坚持 一天一篇 点个订阅 ...

随机推荐

  1. SpringCloud学习系列-构建部门微服务提供者Module

    1.新建microservicecloud-provider-dept-8001 2.POM <project xmlns="http://maven.apache.org/POM/4 ...

  2. 用vue构建项目同一局域网下通过ip访问

    在webpack配置文件下改为 host:'0.0.0.0' 改为后启动跳转不到登录页面 需手动修改浏览器上的0.0.0.0:8080为自己ip加上:8080 就可以在别的电脑上进行访问了 举一反三: ...

  3. linux运维、架构之路-MySQL(二)

    一.SQL语句实战 1.DDL语句——库管理 ①查看数据库 show databases; show databases like 'word%';#模糊查询数据库 ②创建数据库 create dat ...

  4. wxy和zdy眼中的水题 地精部落 dp

    题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到 ...

  5. sh_02_第2个Python程序

    sh_02_第2个Python程序 print("hello")

  6. vue.js条件渲染 v-if else-if v-for

    v-if: 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: {{#if ok}} <!-- Handlebars 模板 --> <h1>Yes</ ...

  7. JSP异常处理

    JSP异常处理 当编写JSP程序的时候,程序员可能会遗漏一些BUG,这些BUG可能会出现在程序的任何地方.JSP代码中通常有以下几类异常: 检查型异常:检查型异常就是一个典型的用户错误或者一个程序员无 ...

  8. LOJ504「LibreOJ β Round」ZQC 的手办

    https://loj.ac/problem/504 题解 对于区间取\(\max\),这个比较好办,直接在线段树上打标记就行了. 如果让我们弹出前\(n\)个数,我们可以用类似超级钢琴的思想,队列中 ...

  9. 阿里云CentOS 7.3安装Redis详细步骤

    ############  准备  ############### 从Redis官网下载Linux redis3.2.6版本,我下载的redis-3.2.6.tar.gz(目前最新稳定版),下载到/u ...

  10. 使用@Test报java.lang.NullPointerException at org.eclipse.jdt.internal.junit4.runner.SubForestFilter.shouldRun(SubForestFilter.java:81)异常

    对公司的项目进行二次开发时,在调试过程中用到@Test注解,运行使发现控制台报空指针异常,如图: 参考网上相应资料后,删除项目中自带的Junit4.jar,然后使用eclipse开发工具自带的Juni ...