题目:
teacher想知道从某某同学当中,分数最高的是多少,现在请你编程模拟teacher的询问。当然,teacher有时候需要更新某位同学的成绩.
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,假设A<B,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
注意:输入包括多组测试数据。
代码:
#include<stdio.h>
int get_max(int score[],int j,int k);
int main(void)
{
int N,M;
int score[30000] = {0};
int output[5000] = {0};
int i,j,k,temp;
int q_num = 0;
char ch;
if( (scanf("%d %d",&N,&M)) == 2 )
{
for(i=0; i<N; i++)
scanf("%d",&score[i]);
for(i=0; i<M; i++)
{
scanf(" %c %d %d",&ch,&j,&k);
if(ch == 'Q')
{
if(j>k)
{
temp = j;
j = k;
k = temp;
}
output[q_num] = get_max(score,j,k);
q_num++;
}
else if(ch == 'U')
{
score[j-1] = k;
}
else
{
continue;
}
}
}
for(i=0; i<q_num; i++)
printf("%d\n",output[i]);
return 0;
}
int get_max(int score[],int j,int k)
{
int max = score[j-1];
int i;
for(i=j; i<k; i++)
{
if(score[i]>max)
max = score[i];
}
return max;
}