问题 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. java:集合输出Iterator,ListIterator,foreach,Enumeration

    //集合输出,集合的四种输出 Iterator, ListIterator, foreach, Enumeration 只要碰到集合,第一输出选择是Iterator类. Iterator<E&g ...

  2. MVC模式 和 MVVM模式

    MVC模式 模型 - 视图 - 控制器或MVC,MVC是普遍的叫法,是一种软件设计模式,用于开发Web应用程序.模型- 视图 - 控制器模式是由以下三部分组成: 模型/Model - 一个负责维护数据 ...

  3. springboot+mybatis 配置sql打印日志

    第一种: 配置类型 # 配置slq打印日志 logging.level.com.lawt.repository.mapper=debug重点: #其中   com.lawt.repository.ma ...

  4. shell处理文件内容

    1.head:输出前N行 2.tail:输出后N行 3.cat:查看文件所有内容 4.wc:统计文件内容相关信息(行数,字符数等) 5.

  5. el-select中显示图标/图片设置

    <template> <el-select ref="select_icon" v-model="addModel.icon" @change ...

  6. POJ 3764 The xor-longest Path ( 字典树求异或最值 && 异或自反性质 && 好题好思想)

    题意 : 给出一颗无向边构成的树,每一条边都有一个边权,叫你选出一条路,使得此路所有的边的异或值最大. 分析 : 暴力是不可能暴力的,这辈子不可能暴力,那么来冷静分析一下如何去做.假设现在答案的异或值 ...

  7. Java——package与import

    [package]   <1>为了解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间. <2>package作为源文件的第一条语句(缺省时指定为 ...

  8. [HTML]时钟

    <div class="clock" id="clock"> <!-- 原点 --> <div class="origi ...

  9. 大数据笔记(六)——HDFS的底层原理:JAVA动态代理和RPC

    一.Java的动态代理对象 实现代码如下: 1.接口类MyService package hdfs.proxy; public interface MyService { public void me ...

  10. java中 使用输入+输出流对对象序列化

    对象: 注意记得实现 Serializable package com.nf147.sim.entity; import java.io.Serializable; public class News ...