输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。 学生ID编号从1编到N。 第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩 接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少 当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
对于每一次询问操作,在一行里面输出最高成绩.
5 7 1 2 3 4 5 Q 1 5 U 3 6 Q 3 4 Q 4 5 U 4 5 U 2 9 Q 1 5
5 6 5 9
while True:
try:
a, b = map(int, input().split())
grades = list(map(int, input().split()))
for i in range(b):
command = input().split()
if command[0] == "Q":
start, end = sorted([int(command[1]), int(command[2])])
print(max(grades[start - 1:end]))
else: grades[int(command[1]) - 1] = int(command[2])
except:
break
坑爹啊,漏了whie(in.hasNext())import java.util.Scanner; public class Main { public static void main(String[] args) { int M=0 ,N=0; int i; int A = 0,B = 0; Scanner in = new Scanner(System.in); while(in.hasNext()){ N = in.nextInt(); M = in.nextInt(); // System.out.println (N + " " + M); int[] score = new int[N]; for(i=0; in.hasNext() && i<N; i++){ score[i] = in.nextInt(); // System.out.println (score[i] + " "); } String c = null; for(i=0; in.hasNext() && i< M; i++){ c = in.next(); A = in.nextInt(); B = in.nextInt(); process(c,A,B,score); } } } private static void process(String c, int a, int b, int[] score) { int begin,end; if(c.equals("Q")){ end = Math.max(a, b); begin = Math.min(a, b)-1; int max = score[begin]; for(int i=begin;i<end;i++){ if(max<score[i]){ max = score[i]; } } System.out.println(max); }else if(c.equals("U")){ score[a-1] = b; } } }
#include<algorithm> #include<vector> using namespace std; int main() { int N,M; while(cin>>N>>M){ vector<int> stu(N); int a,b;char c; for(int i=0;i<N;++i)cin>>stu[i]; for(int j=0;j<M;++j){ cin>>c>>a>>b; if(c=='Q'){ if(a>b)swap(a,b); cout<<*max_element(stu.begin()+a-1,stu.begin()+b)<<endl; } if(c=='U')stu[a-1]=b; } } return 0; }
//线段树 #include <iostream> #include <string> using namespace std; #define L(x) x<<1 #define R(x) (x<<1)+1 #define Max(x,y) x>=y?x:y #define Min(x,y) x<=y?x:y struct Node { int left,right; int value; int flag; }; Node data[30001<<2]; void Build(int i, int l, int r) { data[i].left = l; data[i].right = r; if(l == r) { scanf("%d",&data[i].value); return; } int mid = (l+r)>>1; Build(L(i),l,mid); Build(R(i),mid+1,r); data[i].value = max(data[L(i)].value,data[R(i)].value); } int Query(int i, int l, int r) { if(l>r||data[i].right < l||data[i].left > r) return 0; if(data[i].right == r && data[i].left == l) return data[i].value; int mid = (data[i].right+data[i].left)>>1; if(mid < l) return Query(R(i),l,Min(r,data[i].right)); else if(mid >= r) return Query(L(i),Max(l,data[i].left),r); else return max(Query(L(i),Max(l,data[i].left),mid),Query(R(i),mid+1,Min(r,data[i].right))); } void Update(int root, int i, int newValue) { if(i == data[root].left && i == data[root].right) { data[root].value = newValue; return; } int mid = (data[root].left + data[root].right)>>1; if(i <= mid) Update(L(root),i,newValue); else Update(R(root),i,newValue); data[root].value = max(data[L(root)].value,data[R(root)].value); } int main() { int N,M; while(cin>>N>>M) { Build(1,1,N); char op[10]; while(M--) { int a,b; scanf("%s %d %d",op, &a, &b); if(op[0] == 'Q') printf("%d\n",Query(1,min(a,b),max(a,b))); else if(op[0] == 'U') Update(1,a,b); } } return 0; }
while True: try: inp_m_n=raw_input() inp_m_n=inp_m_n.split() M=int(inp_m_n[1]) N=int(inp_m_n[0]) input_id=raw_input() input_id=input_id.split() input_id=[int(i) for i in input_id] dic={} out_show=[] while(M>0): M-=1 input_q_u=raw_input() input_q_u=input_q_u.split() A=int(input_q_u[1]) B=int(input_q_u[2]) if(input_q_u[0]=='Q'): if(A==B): out_show.append(input_id[A-1]) elif(A>B): out_show.append(max(input_id[B-1:A])) else: out_show.append(max(input_id[A-1:B])) elif(input_q_u[0]=='U'): input_id[A-1]=B for i in out_show: print i except: break
#include<iostream> #include<vector> #include<algorithm> using namespace std; void Caozuo(vector<int> &vec,char a,int b,int c) {vector<int> temp; if(a=='Q') { temp=vec; if(b>c) swap(b,c); ///////如果b>c则交换两个的值,然后再排序,否则会有段错误 sort((temp.begin()+b-1),(temp.begin()+c));// cout<<temp[c-1]<<endl; } if(a=='U') { vec[b-1]=c; } } int main() { int N,M; int num,a,b; char ch; while(cin>>N>>M) { vector<int> Nc; vector<char> Mcch; vector<int> Mcnum; vector<int> Mcnum1; for(int i=0;i<N;i++)//录入成绩 {cin>>num; Nc.push_back(num); } for(int i=0;i<M;i++)//录入操作 { cin>>ch>>a>>b; Mcch.push_back(ch); Mcnum.push_back(a); Mcnum1.push_back(b); } for(int i=0;i<M;i++) { Caozuo(Nc,Mcch[i],Mcnum[i],Mcnum1[i]); } } return 0; }
不止输入一组n m ;
AB之间,可能A>B
while True:
try:
N, M = [int(x) for x in input().split()]
score = [int(x) for x in input().split()]
operate = []
for i in range(M):
operate.append([x for x in input().split()])
for i in range(M):
a = int(operate[i][1])
b = int(operate[i][2])
if operate[i][0] == 'Q':
if a > b:
a, b = b, a
print(max(score[a-1:b]))
if operate[i][0] == 'U':
score[a-1] = b
except:
break
import sys while True: try: NM = sys.stdin.readline().split(' ') N = int(NM[0]) M = int(NM[1]) inputGrades = sys.stdin.readline().split(' ') grades = [int(_) for _ in inputGrades] for _ in range(M): inputText = sys.stdin.readline().split(' ') if inputText[0] == 'Q': startID = int(inputText[1]) endID = int(inputText[2]) maxGrade = max(grades[min(startID, endID)-1: max(startID, endID)]) print(maxGrade) elif inputText[0] == 'U': sID = int(inputText[1]) sGrade = int(inputText[2]) grades[sID - 1] = sGrade except: break
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner keyin = new Scanner(System.in); while(keyin.hasNextLine()){ int action, num ; //表示操作数和学生数 String putIn = keyin.nextLine() ; action = getAction(putIn); num = getNum(putIn); int data[] = new int [num] ; putIn = keyin.nextLine() ; LogIn(putIn,data); int result[] = new int [action]; for(int x = 0 ; x < action ; x ++){ putIn = keyin.nextLine(); String all [] = putIn.split(" "); if(all[0].equals("Q")){ result [x] = compare(data,Integer.parseInt(all[1]),Integer.parseInt(all[2])); }else{ result[x] = -1 ; data[Integer.parseInt(all[1]) - 1] = Integer.parseInt(all[2]) ; } } for(int x = 0 ; x < result.length ; x ++){ if(result[x] >= 0){ System.out.println(result[x]); } }} } public static int compare(int[] data, int x, int y) { int all[] = new int [y - x + 1] ; int n = 0 ; for(int z = x - 1 ; z < y ;z ++){ all[n] = data [z] ; n ++ ; } Arrays.sort(all); return all[all.length - 1] ; } public static void LogIn(String putIn, int[] data) { String all[] = putIn.split(" "); for(int x = 0 ; x < data.length ; x ++){ data[x] = Integer.parseInt(all[x]) ; } } public static int getAction(String str){ String all[] = str.split(" "); return Integer.parseInt(all[1]) ; } public static int getNum(String str){ String all[] = str.split(" "); return Integer.parseInt(all[0]) ; } }
#include<iostream> #include<vector> #include<algorithm> using namespace std; class GradeQuery{ public: vector<int> stuGrade; void query(int stu1, int stu2){ auto it = max_element(stuGrade.begin()+stu1-1, stuGrade.begin()+stu2); cout << *it << endl; } void update(int stu, int grade){ stuGrade[stu-1] = grade; } }; int main(){ int num, oper_num; while(cin >> num >> oper_num){ GradeQuery gradeQuery; int tmp, arg1, arg2; char inChar; for(int i=0; i<num; i++){ cin >> tmp; gradeQuery.stuGrade.push_back(tmp); } for(int i=0; i<oper_num; i++){ cin >> inChar >> arg1 >> arg2; if(inChar == 'Q') { if(arg2>=arg1) gradeQuery.query(arg1, arg2); else gradeQuery.query(arg2,arg1); } else gradeQuery.update(arg1, arg2); } } return 0; }
import java.util.Scanner; import java.util.ArrayList; public class Main { public static void main(String[] args)throws Exception{ Scanner s = new Scanner(System.in); int[] data = new int[2]; do{ data[0] = s.nextInt(); data[1] = s.nextInt(); ArrayList<Integer> array = new ArrayList<Integer>(); for(int i = 0; i < data[0]; i ++){ array.add(s.nextInt()); } int num = 0; char a ; int b,c; while(num < data[1]){ a = s.next().charAt(0); b = s.nextInt(); c = s.nextInt(); if('Q' == a){ int start, end; if(b <= c){ start = b - 1; end = c - 1; }else{ start = c - 1; end = b - 1; } int max = array.get(start); for(int index = start; index <= end; index ++){ if(array.get(index) >= max) max = array.get(index); } //result.add(max); System.out.println(max); } if('U' == a){ int index1 = b - 1; int newValue = c; array.set(index1, newValue); } s.nextLine(); num ++; } }while(s.hasNext()); s.close(); } }
#include <vector> #include <iostream> using namespace std; int CheckMax(vector<int> & stu, int a, int b){ int m = stu[a]; for (int i = a; i <= b; i++) m = max(m, stu[i]); return m; } int main(void){ int n = 0, m = 0; while(cin >> n >> m){ vector<int> stu(n); char c; int a = 0, b = 0; for (int i = 0; i<n; i++) cin >> stu[i]; for (int i = 0; i<m; i++){ cin >> c>>a>>b; if (c == 'Q'){ if (a>b) swap(a, b); cout<<CheckMax(stu,a-1,b-1)<<endl; } if (c == 'U') stu[a - 1] = b; } } }
#include <iostream> using namespace std; int getMax(int *pScore, int low, int high) { if(low > high) { high = low ^ high; low = low ^ high; high = low ^ high; } int maxScore = pScore[low]; for(int i = low + 1; i <= high; ++i) { if(maxScore < pScore[i]) { maxScore = pScore[i]; } } return maxScore; } int main() { int N = 0; int M = 0; while(cin >> N >> M) { int *pScore = new int[N + 1]; for(int i = 1; i <= N; ++i) { cin >> pScore[i]; } for(int i = 0; i < M; ++i) { char ch = '\0'; int low = 0; int high = 0; cin >> ch >> low >> high; if('Q' == ch) { cout << getMax(pScore, low, high) << endl; } else if('U' == ch) { pScore[low] = high; } else { // continue; } } delete[] pScore; } return 0; }
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int N,M; while(cin >> N >> M) { if(N<0 || N>30000 || M<0 || M>=5000) { return -1; } vector<int> grades; grades.push_back(-1); for(int i=0; i<N; i++) { int temp; cin >> temp; grades.push_back(temp); } for(int j=0; j<M; j++) { char C; int A,B; cin >> C >> A >> B; switch(C) { case('Q'): { if(A<=B) { auto max = max_element(grades.begin()+A,grades.begin()+B+1); cout << *max << "\n"; break; } else if(A>B) { auto max = max_element(grades.begin()+B,grades.begin()+A+1); cout << *max << "\n"; break; } } case('U'): { grades[A]=B; break; } } } } return 0; }
#include<iostream> using namespace std; int PRINTF_MAX(int *a,int A,int B); int main() { int N,M,A,B,C=0; char j; while(cin>>N>>M) { int *a=new int[N*sizeof(int)]; int *b=new int[M*sizeof(int)]; for(int i=0;i!=N;++i) cin>>a[i]; for(int i=0;i!=M;++i) { cin>>j; if(j=='Q') { cin>>A>>B; b[C]=PRINTF_MAX(a,A,B); C++; } else if(j=='U') { cin>>A>>B; a[A-1]=B; } else cout<<"ERROR!"<<endl; } for(int i=0;i!=C;++i) cout<<b[i]<<endl; } /**a=NULL; *b=NULL; delete []a; delete []b;*/ //getchar(); return 0; } int PRINTF_MAX(int *a,int A,int B) { int MAX=0,TEMP; if(B<A) { TEMP=A; A=B; B=TEMP; } for(int k=A;k<=B;k++) { if(MAX<=a[k-1]) MAX=a[k-1]; } return MAX; } //有没有大神给解惑下,我这个代码就卡在10%第二个用例过不去,可是在自己电脑上没出错啊!!!!