problem description
很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。
這讓很多學生很反感。
不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫乙個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。
input
本題目包含多組測試,請處理到檔案結束。
在每個測試的第一行,有兩個正整數 n
和 m ( 0,分別代表學生的數目和操作的數目。
學生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。
output
對於每一次詢問操作,在一行裡面輸出最高成績。
sample input
5 6
1 2 3 4 5
q 1 5
u 3 6
q 3 4
q 4 5
u 2 9
q 1 5
sample output
5 6 5
9 hint:
huge input,the c function scanf() will work better than cin
。
//hdoj-1754-ac 線段樹模板,可用於區間max\min\sum等
#include
#include
#include
#include
using namespace std;
#define m 210000
const int n=m*3;//乘以2不行,不太理解
int val[n],a[m];
int n,m;//頂點數、運算元
int ql,qr;//查詢次數多,故不作為函式引數
int modify_pos,modify_val;//單點修改,涵義見變數名
void f_in() int main(int argc, char *argv) { //freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&m)!=eof){ f_in();getchar(); f_build_max(1,0,n-1); char ch; for(int i=0;i
HDOJ 1754 線段樹 單點更新
這道題是線段樹簡單的入門題,只是簡單考察了線段樹的基本使用,建樹等操作。這裡需要注意的是輸入要不使用scanf要不使用快速輸入。這裡的maxs陣列需要開大一點,4倍是最穩妥的,一定不會溢位。區間查詢的時候要注意if後不是之間使用else應該分開寫,因為兩個區間可能是相交的。單點更新,單點查詢 inc...
Lost Cows 線段樹點修改
題目大意 有編號為1 n的n頭牛,已知排在第i頭牛前面且比第i頭牛編號小的牛的數量為ai,求第i頭牛的編號 input c組資料,每組陣列乙個n,接著n個數字表示排在第i位的牛的ai.output 按順序輸出每位牛的編號.思路 從最後一頭牛開始,ans i 剩餘編號中的第ai小的編號,include...
hdu 1754 基礎線段樹
題目鏈結 思路 比較簡單的線段樹,區間求最值,單點更新。讀入字元的時候,最好用字元陣列儲存,使用 s讀入,如果使用 c 會t 好像是會吃掉換行符。include include include define maxn 2000005 using namespace std int stu maxn ...