郊游//这篇答案好像是有问题的,大家还是不要看了
题目描述
摩乐乐和他的朋友想出去郊游,他们现在有n座山(排成一行)可以选择,并且每座山的山顶都有独一无二的风景。当爬上某座山的山顶时,除了可以欣赏这座山本身的风景,还可以欣赏其他山顶的风景(只能看到比这座山高的风景,且因为视野影响可能只能看到高度单调递增的地方)。现在给出n座山的高度,请计算出爬上每座山的可以欣赏的风景的数量供摩乐乐和他的朋友选择。
输入格式
第一行 一个整数n
第二行 n个整数 表示每座山的高度
输出格式
一行n个整数 表示每座山可以看到的风景数量
数据规模
代码如下:小白写代码,如有错误,望请指正!
#include<stdio.h>
#include<stdlib.h>
typedef struct astack
{
int top,maxtop,num;
int *data;
}astack;
typedef struct astack *Stack;
Stack StackInit(int size)
{
Stack S=(Stack)malloc(sizeof *S);
S->data=(int*)malloc(size*sizeof(int));
S->maxtop=size;
S->top=-1;
S->num=0;
return S;
}
void Push(int x,Stack S)
{
S->data[++S->top]=x;
S->num++;
}
int main()
{
int size,i=0,j=0,k=0,a[100001]={0},b[100001]={0};
scanf("%d",&size);
for(i=0;i<size;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<size;i++)
{
int temp=a[i];
Stack S=StackInit(size);
Push(temp,S);
for(j=i-1;j>=0;j--)
{
if(a[j]>S->data[S->top])
{
Push(a[j],S);
}
}
for(k=i+1;k<size;k++)
{
if(k==i+1&&a[k]>temp)
{
Push(a[k],S);
}
else if(a[k]>(S->data[S->top]))
{
Push(a[k],S);
}
}
b[i]=S->num;
free(S->data);
free(S);
}
printf("%d",b[0]);
for(i=1;i<size;i++)
{
printf(" %d",b[i]);
}
return 0;
}