列表

详情


NC24280. [USACO 2018 Ope S]Out of Sorts

描述

留意着农场之外的长期职业生涯的可能性,奶牛Bessie开始在不同的在线编程网站上学习算法。

她到目前为止最喜欢的算法是“冒泡排序”。这是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;
}

上一题