Sort the Array
来源:互联网 发布:java人机猜拳代码 编辑:程序博客网 时间:2024/05/22 10:50
Being a programmer, you like arrays a lot. For your birthday, your friends have given you an array a consisting of n distinct integers.
Unfortunately, the size of a is too small. You want a bigger array! Your friends agree to give you a bigger array, but only if you are able to answer the following question correctly: is it possible to sort the array a (in increasing order) by reversing exactly one segment of a? See definitions of segment and reversing in the notes.
The first line of the input contains an integer n (1 ≤ n ≤ 105) — the size of array a.
The second line contains n distinct space-separated integers: a[1], a[2], ..., a[n](1 ≤ a[i] ≤ 109).
Print "yes" or "no" (without quotes), depending on the answer.
If your answer is "yes", then also print two space-separated integers denoting start and end (start must not be greater than end) indices of the segment to be reversed. If there are multiple ways of selecting these indices, print any of them.
33 2 1
yes1 3
42 1 3 4
yes1 2
43 1 2 4
no
21 2
yes1 1
Sample 1. You can reverse the entire array to get [1, 2, 3], which is sorted.
Sample 3. No segment can be reversed such that the array will be sorted.
Definitions
A segment [l, r] of array a is the sequence a[l], a[l + 1], ..., a[r].
If you have an array a of size n and you reverse its segment [l, r], the array will become:
a[1], a[2], ..., a[l - 2], a[l - 1], a[r], a[r - 1], ..., a[l + 1], a[l], a[r + 1], a[r + 2], ..., a[n - 1], a[n].
用排好序的数组b与原数组a对比,记录下第一个不同的位置的下标i和最后一个不同的位置的下标j,以a[i++]==b[j--]来做对比,只要有一个不相等即为no
#include<bits/stdc++.h>#define MAX 100005using namespace std;int a[MAX];int b[MAX];int main(){ int n; while(scanf("%d",&n)!=EOF) { int l=0,r=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); b[i] = a[i]; } sort(b+1,b+n+1); for(int i=1;i<=n;i++) { if(a[i]!=b[i]) { r= i; if(l==0) l=i; } } if(l==0) l=1; if(r==0) r=1; int i,j; for(i=l,j=r;i<r;i++,j--) { if(a[i]!=b[j]) { printf("no\n"); return 0; } } printf("yes\n"); printf("%d %d\n",l,r); } return 0;}
- B - Sort the Array
- B. Sort the Array
- Sort the Array
- Sort the Array CodeForces
- Sort the Array
- codeforce-B. Sort the Array
- 451 B. Sort the Array
- Sort the Array+codeforces+水题
- 451B - Sort the Array
- Sort the Array (CF)
- Codeforces 451B Sort the Array
- Codeforces 451B Sort the Array(水题)
- codeforce 451B Sort the Array
- Codeforces 451 B. Sort the Array
- CF 258B. Sort the Array
- CodeForces 451B Sort the Array
- CodeForces 451B. Sort the Array
- codeforces 451B Sort the Array
- [架构]事件机制--典型观察者模式
- JVM运行报错:GC overhead limit exceeded
- jQuery选择器与过滤器
- Python 清除线上数据oom内存溢出事件
- 1059. C语言竞赛(20)
- Sort the Array
- java对链表(环、交叉链表的应用)
- Android 获取listview中的文本 报错:android.widget.LinearLayout cannot be cast to android.widget.TextView
- linq insert The null value cannot be assigned to a member with type System.Int64 which is a non-null
- 出现GC overhead limit exceeded 的解决方案
- 1060. 爱丁顿数(25)
- 【数据库】实验一
- MySQL 存储过程中的游标使用
- 【软考】纠错1-3