NC206162. xby的排序问题
描述
// 伪代码 flag= false while ( !flag ): flag= true for i = 0 to N-2: if A[i+1] < A[i]: swap A[i], A[i+1] flag= false //
输入描述
第一行一个整数,第二行个整数表示序列。
输出描述
一行一个整数,表示答案。
示例1
输入:
5 1 5 3 8 2
输出:
4
C++14(g++5.4) 解法, 执行用时: 22ms, 内存消耗: 1016K, 提交时间: 2020-07-13 15:54:17
#include<cstdio> #include<algorithm> using namespace std; const int MAXN=1e5+5; pair<int,int> x[MAXN]; int n; int main() { scanf("%d",&n); for(int i=1; i<=n; ++i) scanf("%d",&x[i].first),x[i].second=i; sort(x+1, x+n+1); int ans=0; for(int i=1; i<=n; ++i) ans=max(ans,x[i].second-i); printf("%d\n",ans+1); return 0; }
C++(clang++11) 解法, 执行用时: 36ms, 内存消耗: 1144K, 提交时间: 2021-03-19 11:34:45
#include<bits/stdc++.h> using namespace std; const int N=100010; int n; pair<int,int>dp[N]; int main() { cin>>n; for(int i=0;i<n;i++) cin>>dp[i].first,dp[i].second=i; sort(dp,dp+n); int ans=-1; for(int i=0;i<n;i++){ ans=max(ans,dp[i].second-i); } cout<<ans+1<<endl; }