【暑期多校联萌

来源:互联网 发布:往届生银行知乎 编辑:程序博客网 时间:2024/06/16 18:52


点击打开链接



问题 D: QAQ & ORZ 的签到题

时间限制: 1 Sec 内存限制: 128 MB

提交: 834 解决: 204

题目描述

QAQ 的好朋友 ORZ,最近在做一个选拔节目的评委,对于每位选手 ORZ 想知道在这个选手以及这位选手前面的的选手中,得分最高和最低的选手的序号分别是多少....

ORZ 找了 QAQ 帮忙,但是 QAQ 最近在追火星情报局....所以你可以帮助 QAQ 解决 ORZ 的问题吗?

输入

第一行一个数 T  ($1 \leq T \leq 10$),表示 T 组测试数据

第二行一个数 n  ($1 \leq n \leq 10^5$ ),表示有 n 位选手

接下来 n 行,每行一个数 a ($1 \leq a \leq 10^8$),表示第 i 位选手的得分,打分总是从第一位选手开始

输出

输出从 1 ~ n 位选手中 a[i],在 1 ~ i 之间的选手中得分最高和得分最低的选手的序号分别是多少。

如果得分相同则优先输出较小的序号。

样例输入

13123

样例输出

1 12 13 1


//             坑在如果相等的情况下输出最小的。

//             题意分析:  i  =  1  时   输出 1  1;

                                    i  =  2 时    分三种情况:   

                                                                                   1 )  如果 a[i]  >  a[i-1]   :   max  =  a[i]  , pos1  =  i  ;   min   =   a [i-1]   ,     pos2  =   i  - 1;

                                                                                   2 )  如果 a[i]  <  a[i-1]   :   max  =  a[i-1]  , pos1  =  i -1 ;   min   =   a [i]   ,     pos2  =   i ;

                                                                                   3 )  如果  a[i]  ==  a[i-1]  :  max  =  min  = a[i]   ,  pos1  =  pos2  =  i;

                                   i  >  2 时   就与最大最小值比较

                                                                                  1 )  即不大于最大值也不小于最大值就不更新最大最小值的位置,相等也不更新;

                                                                                  2 )  大于最大值就更新最大值的位置;

                                                                                  3 )  小于最小值就更新最小值的位置;

//代码如下:

#include <cstdio>const int maxn = 1e6 + 10;int a[maxn];int main(){int t;scanf ("%d",&t);while (t--) { int n,l,r; int max,min; scanf ("%d",&n); for (int i = 1 ; i <= n ; i++)    {     scanf ("%d",&a[i]);     if (i == 1)        printf ("%d %d\n",i,i);     else  if (i == 2)       {         if (a[i] < a[i-1])           {           max = a[i-1];           l = i-1;           min = a[i];           r = i; }   else if (a[i] > a[i-1])     {     max = a[i];     l = i;     min = a[i-1]; r = i-1;  }   else     l = r = i-1;   printf ("%d %d\n",l,r); }else  {  if (a[i] <= max && a[i] >= min)    printf ("%d %d\n",l,r);  else if (a[i] > max)    {    max = a[i];    l = i;    printf ("%d %d\n",l,r);  }else if (a[i] < min)  {  min = a[i];  r = i;  printf ("%d %d\n",l,r);  }  }   } }return 0;}








原创粉丝点击