数据结构实验之栈五:下一较大值(一)

来源:互联网 发布:阿松手办淘宝 编辑:程序博客网 时间:2024/05/19 09:16

Problem Description

对于包含n(1<=n<=1000)个整数的序列,对于序列中的每一元素,在序列中查找其位置之后第一个大于它的值,如果找到,输出所找到的值,否则,输出-1。
Input
输入有多组,第一行输入t(1<=t<=10),表示输入的组数;

以后是 t 组输入:每组先输入n,表示本组序列的元素个数,之后依次输入本组的n个元素。
Output
输出有多组,每组之间输出一个空行(最后一组之后没有);

每组输出按照本序列元素的顺序,依次逐行输出当前元素及其查找结果,两者之间以–>间隔。
Example Input

24 12 20 15 185 20 15 25 30 6 

Example Output

12-->2020-->-115-->1818-->-1
20-->2515-->2525-->3030-->-16-->-1

Hint
本题的数据量小、限时要求低,可以不用栈来完成。
Author

#include <stdio.h>#include<math.h>#include <stack>#include <iostream>#include <algorithm>#include <bits/stdc++.h>using namespace std;struct node{    int data,id, next;};struct node ss[100100];int main(){    stack <struct node> p;    int t;    scanf("%d", &t);    int tt=t;    while(t--)    {        if(tt!=t+1)printf("\n");        while(!p.empty())        {            p.pop();        }        int n, a;        scanf("%d", &n);        for(a=1; a<=n; a++)        {            scanf("%d", &ss[a].data);            ss[a].id=a;            ss[a].next=-1;            while(!p.empty())            {                struct node k=p.top();                if(ss[a].data>k.data)                {                    ss[k.id].next=ss[a].data;                    p.pop();                }                else break;            }            p.push(ss[a]);        }        for(int a=1; a<=n; a++)        {            printf("%d-->%d\n", ss[a].data, ss[a].next);        }    }    return 0;}
0 0