处理有相同等级值的情况
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, *data;
int fen(int*,int);
scanf("%d", &n);
data = (int*)malloc(sizeof(int) * n);
for (i = 0; i < n; ++i) scanf("%d",&data[i]);
printf("%d\n", fen(data, n));
free(data);
return 0;
}
int fen(int*data,int n)
{
int i,sum=0,m,k,f,s=1;
m=1;
sum+=m;
k=0;
f=1;
for(i=1;i<n;++i)
{
if (data[i]== data[i-1])
{
sum+=m;
if(i==0) k++;
if(i==1) s++;
}
else if (data[i]< data[i-1])
{
f=0;
k++;
m--;
sum+=m;
}
else
{
if(f==1)
{
m++;
sum+=m;
s=1;
}
else
{
if(m<1)sum+=(k+s)*(1-m);
if(m>1)sum-=k*(m-1);
m=2;
sum+=m;
k=0;
f=1;
s=1;
}
}
}
if(f==0)
{
if(m<1)sum+=(k+s)*(1-m);
if(m>1)sum-=k*(m-1);
}
return sum;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, *data;
int fen(int*,int);
scanf("%d", &n);
data = (int*)malloc(sizeof(int) * n);
for (i = 0; i < n; ++i) scanf("%d",&data[i]);
printf("%d\n", fen(data, n));
free(data);
return 0;
}
int fen(int*data,int n)
{
int i,sum=0,m,k,f,s=1;
m=1;
sum+=m;
k=0;
f=1;
for(i=1;i<n;++i)
{
if (data[i]== data[i-1])
{
sum+=m;
if(i==0) k++;
if(i==1) s++;
}
else if (data[i]< data[i-1])
{
f=0;
k++;
m--;
sum+=m;
}
else
{
if(f==1)
{
m++;
sum+=m;
s=1;
}
else
{
if(m<1)sum+=(k+s)*(1-m);
if(m>1)sum-=k*(m-1);
m=2;
sum+=m;
k=0;
f=1;
s=1;
}
}
}
if(f==0)
{
if(m<1)sum+=(k+s)*(1-m);
if(m>1)sum-=k*(m-1);
}
return sum;
}