100136. 冒泡的胖头鱼Out of Sorts

Posted gmh77

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100136. 冒泡的胖头鱼Out of Sorts相关的知识,希望对你有一定的参考价值。

100136

技术图片

题解

分界线i的产生当且仅当右边属于左边的全部移过去,等价于右边要移的最大的数前要移到右边的数个数,等于最大位置-i,设为c[i]

然后一个数算的次数=max(c[i-1],c[i]),0要当做1来算

不需要用栈

code

#include <bits/stdc++.h>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
#define ll long long
using namespace std;

struct type{int x,id;} b[100001];
int a[100001],c[100001],D[100001],d[100002][2],n,i,j,k,l,t;
ll ans;

bool cmp(type a,type b) {return a.x<b.x || a.x==b.x && a.id<b.id;}

int main()
{
	scanf("%d",&n);
	fo(i,1,n) scanf("%d",&a[i]),b[i]={a[i],i};
	
	sort(b+1,b+n+1,cmp);
	fo(i,1,n) a[b[i].id]=i;
	
	fo(i,1,n) D[a[i]]=i;
	l=0;
	fo(i,1,n-1)
	l=max(l,D[i]),c[i]=max(l-i,1);
	c[0]=c[n]=1;
	
	fo(i,1,n) ans+=max(c[i-1],c[i]);
	printf("%lld
",ans);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}

以上是关于100136. 冒泡的胖头鱼Out of Sorts的主要内容,如果未能解决你的问题,请参考以下文章

Java中的经典算法之冒泡排序(Bubble Sort)

Mysql提示:Out of sort memory, consider increasing server sort buffer size

Mysql提示:Out of sort memory, consider increasing server sort buffer size

冒泡排序

面试之冒泡排序代码实现

冒泡排序