題目: [編程題]最高分是多少 老師想知道從某某同學(xué)當(dāng)中,分?jǐn)?shù)最高的是多少,現(xiàn)在請你編程模擬老師的詢問。當(dāng)然,老師有時候需要更新某位同學(xué)的成績. 輸入描述:
輸入包括多組測試數(shù)據(jù)。 每組輸入第一行是兩個正整數(shù)N和M(0 < N <= 30000,0 < M < 5000),分別代表學(xué)生的數(shù)目和操作的數(shù)目。 學(xué)生ID編號從1編到N。 第二行包含N個整數(shù),代表這N個學(xué)生的初始成績,其中第i個數(shù)代表ID為i的學(xué)生的成績 接下來又M行,每一行有一個字符C(只取‘Q’或‘U’),和兩個正整數(shù)A,B,當(dāng)C為’Q’的時候, 表示這是一條詢問操作,他詢問ID從A到B(包括A,B)的學(xué)生當(dāng)中,成績最高的是多少 當(dāng)C為‘U’的時候,表示這是一條更新操作,要求把ID為A的學(xué)生的成績更改為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
求解樹狀圖 1、構(gòu)造一個函數(shù)(操作Q,U) 2、主函數(shù) 構(gòu)造四個容器(分別存放成績、詢問、前操作值、后操作值),并錄入 3、代入函數(shù) 注意事項(xiàng): 1、函數(shù)詢問操作用到排序要引用,不能改變原有的值 2、注意當(dāng)操作數(shù)前一個大于后一個,在詢問的時候要改變順序,swap(),否則會出現(xiàn)段錯誤。 3、不要寫錯符號。
#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;//bool compare(int x,int y)//{ return x>y;}void Panduan(vector<int> &ivec,char x,int a,int b){ vector<int> tmp; if(x=='Q') { if(a>b) swap(a,b); ///////如果b>c則交換兩個的值,然后再排序,否則會有段錯誤 tmp=ivec; sort((tmp.begin()+a-1),(tmp.begin()+b)); cout<<tmp[b-1]<<endl; } if(x=='U') { ivec[a-1]=b; } }int main(){ int N,M; int input; char ch; int c; int d; while(cin>>N>>M) { vector<char> xunwenvec; vector<int> beforecompare; vector<int> aftercompare; vector<int> totalvec; for(int i=0;i<N;i++) { cin>>input; totalvec.push_back(input); } for(int j=0;j<M;j++) { cin>>ch>>c>>d; xunwenvec.push_back(ch); beforecompare.push_back(c); aftercompare.push_back(d); } for(int j=0;j<M;j++) { Panduan(totalvec,xunwenvec[j],beforecompare[j],aftercompare[j]); } } return 0;}新聞熱點(diǎn)
疑難解答