http://codeforces.com/contest/900/problem/C
给一长度为n的序列,从中去掉一个数,使得有尽量多的子序列满足下列条件:对于j < i, 任何a[j] < a[i]。
如果有多种情况,输出去掉的最小的一个数。
思路:求出逆序数最大的一个数去掉即可(即这个数后面有最多小于他的数)
#include <bits/stdc++.h>
using namespace std;
int n;
int a[100005];
//a[i]表示i这个数移走后增加的record数
int max1,max2;
int main(){
cin >> n;
for (int i=0;i<n;i++){
int x;
cin >> x;
if (x>max1){
max2=max1;
max1=x;
a[max1]--;
}
else if (x>max2){
max2=x;
a[max1]++;
}
}
int ans=1;
for (int i=2;i<=n;i++){
if (a[i]>a[ans]){
ans=i;
}
}
cout << ans << endl;
}