【暑期多校聯萌 - D】 QAQ & ORZ 的簽到題


點擊打開鏈接



問題 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 之間的選手中得分最高和得分最低的選手的序號分別是多少。

如果得分相同則優先輸出較小的序號。

樣例輸入

1
3
1
2
3

樣例輸出

1 1
2 1
3 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;
}








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章