求数据卡掉这个n2算法
查看原帖
求数据卡掉这个n2算法
93008
想象未来楼主2022/12/6 17:35
#include<iostream>
#include<cstdio>
using namespace std;
int a[100005],m=0,n;
bool b[1000000009];
int youjixiao(int l,int r)
{
	for(int i=l;i<=r;i++)
	{
		b[a[i]]=0;
		if(i==l || i==r) 
            continue;
        else
        {
        	if(a[i-1]>a[i]&&a[i+1]>a[i])
                return 1;
		} 
	}
    return 0;
}
void add(int l,int r)
{
	if(!youjixiao(l,r))
	{
		for(int i=l;i<=r;i++)
		{
			if(b[a[i]]==0)
			{
				m++;
				b[a[i]]=1;
			}
		}
		return ;
	}
	if(l>r)
		return ;
	int minn=1000000001;
	for(int i=l;i<=r;i++)
	{
		minn=min(a[i],minn);
	}
	if(minn!=0)
		m++;
	int k=l-1;
	for(int i=l;i<=r;i++)
	{
		a[i]-=minn;
		if(a[i]==0)
		{
			if(k+1<=i-1)
				add(k+1,i-1);
			k=i;
		}
		if(i==r&&a[i]!=0)
			add(k+1,i);
	}
}
int main()
{ 
//	freopen("1.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]==a[i-1])
			n--,i--;
	}
	add(1,n);
	printf("%d",m);
	return 0;
}

2022/12/6 17:35
加载中...