NC24280. [USACO 2018 Ope S]Out of Sorts
描述
她到目前为止最喜欢的算法是“冒泡排序”。这是Bessie的对长度为N的数组A进行排序的奶牛码实现。
sorted = false while (not sorted): sorted = true moo for i = 0 to N-2: if A[i+1] < A[i]: swap A[i], A[i+1] sorted = false
显然,奶牛码中的“moo”指令的作用只是输出“moo”。奇怪的是,Bessie看上去执着于在她的代码中的不同位置使用这个语句。
给定一个输入数组,请预测Bessie的代码会输出多少次“moo”。
输入描述
输入的第一行包含N(1≤N≤100,000)。接下来N行描述了A[0]…A[N−1],每个数都是一个范围为的整数。输入数据不保证各不相同。
输出描述
输出“moo”被输出的次数。
示例1
输入:
5 1 5 3 8 2
输出:
4
C++14(g++5.4) 解法, 执行用时: 31ms, 内存消耗: 1760K, 提交时间: 2019-06-22 20:19:41
#include<bits/stdc++.h> using namespace std; int ans,n; struct node{ int v,id; bool operator<(const node&x)const{ if(v==x.v)return id<x.id; return v<x.v; } }a[100005]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i].v),a[i].id=i; sort(a+1,a+n+1); for(int i=1;i<=n;i++)ans=max(ans,a[i].id-i+1); printf("%d\n",ans); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 33ms, 内存消耗: 1936K, 提交时间: 2019-06-25 12:33:45
#include<bits/stdc++.h> using namespace std; pair<int,int> num[100010]; int main() { int n; scanf("%d",&n); for( int i=1;i<=n;i++ ) { scanf("%d",&num[i].first); num[i].second=i; } sort(num+1,num+n+1); int ans=0; for( int i=1;i<=n;i++ ) { ans=max(ans,num[i].second-i); } printf("%d",ans+1); return 0; }