似巨龙高歌
题目背景
拜谢 whk 神犇帆巨/bx
尽管帆帆文化课很强,但在新年他不想给同龄蒟蒻带来太大压力,于是他准备对一年的考试成绩做一些手脚……
题目描述
面对着自己向巨龙一样腾飞的成绩,新年到来时帆帆忍不住唱起了《爱你》。
他今年一共有 n n n 次考试,第 i i i 次考试的排名是 a i a_i ai。
这在无形之中给别的同学造成了压力,于是他希望把自己的 n n n 次排名进行重排,使得进步最大的一次考试进步的名次最少,这样他就可以隐藏自己的实力。
对于第 i i i 次和第 i + 1 i+1 i+1 次考试( 1 ≤ i < n 1\le i < n 1≤i<n),他的进步名次即为 a i − a i + 1 a_i-a_{i+1} ai−ai+1,如果该值为负则代表他退步了。
请你帮帮他。
输入格式
输入两行。
第一行,输入一个整数 n n n。
第二行,输入 n n n 个整数,每两个整数之间用空格隔开。第 i i i 个整数表示 a i a_i ai。
输出格式
输出一行一个整数,表示答案。
样例 #1
样例输入 #1
2
1 1
样例输出 #1
0
样例 #2
样例输入 #2
4
2 4 1 3
样例输出 #2
-1
提示
【样例 1 解释】
帆帆不改变原本的考试序列,那么从第一次到第二次考试进步了 0 0 0 名(排名没变化)。
【样例 2 解释】
帆帆可以把自己的考试排名重排为 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4,那么他每次考试都进步了 − 1 -1 −1,所以答案是 − 1 -1 −1。
本题采用捆绑测试
【数据范围】
-
对于 30 % 30\% 30% 的数据,保证 n ≤ 10 n\le 10 n≤10。
-
对于 50 % 50\% 50% 的数据,保证 n ≤ 5000 n\le 5000 n≤5000。
-
对于另外 20 % 20\% 20% 的数据,保证 a i ≤ 2 a_i\le 2 ai≤2。
-
对于 100 % 100\% 100% 的数据,保证 2 ≤ n ≤ 1 0 6 2\le n\le 10^6 2≤n≤106, 1 ≤ a i ≤ 1 0 9 1\le a_i\le 10^9 1≤ai≤109。
思路
题目要求:进步最大的一次考试进步的名次最少。
- 最少:因此我们可以发现,我们只要退步就行了。
- 最大:在考试进步中取最大的就行了。
总的来说:最大的最小就是最大的要最小。
AC代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e6+10;
int w[N],n;
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>w[i];
//最大的一次考试进步的名次最少
sort(w+1,w+1+n);//名次最少
int minv=-2e9;
for(int i=1;i<n;i++){
minv=max(minv,w[i]-w[i+1]);//最大的进步
}
cout<<minv;
return 0;
}