P6364 1024 Naranjas del Festival del Programador (codicioso + suma de prefijo)

Enlace de envío: Idea del portal
Inserte la descripción de la imagen aquí
: para cada persona, considere cuántos puntajes individuales son más pequeños que él y elija un valor máximo entre los dos, ya que esto garantizará que todos se dividan en naranjas. Usando la idea de la suma del prefijo, procese los lados izquierdo y derecho de cada número menos que él, y luego recorra para obtener el valor máximo. (Ps: los datos de Luoguo se están agotando, no hay caso en que los números adyacentes sean iguales).
El código es el siguiente:

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int maxx=1e6+100;
int a[maxx];
int L[maxx],R[maxx];
int n;

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	a[0]=a[n+1]=-1;
	memset(L,0,sizeof(L));
	memset(R,0,sizeof(R));
	L[1]=R[n]=0;
	for(int i=2;i<=n;i++) 
	{
		if(a[i]>a[i-1]) L[i]=L[i-1]+1;
		else if(a[i]==a[i-1]) L[i]=L[i-1];
		else L[i]=0;
	}
	for(int i=n-1;i>=1;i--) 
	{
		if(a[i]>a[i+1]) R[i]=R[i+1]+1;
		else if(a[i]==a[i+1]) R[i]=R[i+1];
		else R[i]=0;
	}
	ll sum=0;
	for(int i=1;i<=n;i++) sum+=max(L[i],R[i])+1ll;
	cout<<sum<<endl;
	return 0;
}

Vamos duro, ( o ) / ~

Publicado 652 artículos originales · ganó 101 · vistas 50,000+

Supongo que te gusta

Origin blog.csdn.net/starlet_kiss/article/details/105483660
Recomendado
Clasificación