HDU- 1754 I Hate It
生活随笔
收集整理的這篇文章主要介紹了
HDU- 1754 I Hate It
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
???? http://acm.hdu.edu.cn/showproblem.php?pid=1754
記住那讓自己wa的地方。
???????????????????????????????? I Hate It
Time Limit: 9000/3000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29300????Accepted Submission(s): 11615
Problem Description 很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。 這讓很多學生很反感。不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫一個程序,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。 Input 本題目包含多組測試,請處理到文件結束。 在每個測試的第一行,有兩個正整數 N 和 M ( 0<N<=200000,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。 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 #include<stdio.h> const int inf=1<<30; #define maxn 500004 struct node { int left,right; int num; }; node tree[3*maxn]; int max=-inf; //可以為負。 void build(int left,int right,int i) {tree[i].left =left;tree[i].right =right;tree[i].num =-inf;//可以取負if(tree[i].left ==tree[i].right )return ;build(left,(left+right)/2,2*i);build((left+right)/2+1,right,2*i+1); } void updat(int id,int i,int j) {if(tree[id].left<=i&&tree[id].right >=i && tree[id].num<j)//起初總少了tree[id].num<j,所以總是WA。更新只有當新分數大于原分數時才適用,//因為是需要所有人中所有分數最高的,包括以前的分數 //更新只有當新分數大于原分數時才適用,因為是需要所有人中所有分數最高的,包括以前的分數 tree[id].num =j;if(tree[id].left ==tree[id].right )return;if(i>tree[id].right )return;if(i<tree[id].left )return;int mid=(tree[id].left +tree[id].right )/2;if(i<=mid)updat(id*2,i,j);elseupdat(id*2+1,i,j); } void maxin(int id,int i,int j) {int mid;mid=(tree[id].left +tree[id].right )/2;if(tree[id].left ==i&&tree[id].right ==j){if(max<=tree[id].num)max=tree[id].num;return;}if(j<=mid)maxin(2*id,i,j);else if(i>mid)maxin(2*id+1,i,j);else{maxin(2*id,i,mid);maxin(2*id+1,mid+1,j);}} int main() {int n,t,l,r,num;char ss[20];while(~scanf("%d%d",&n,&t)){build(1,n,1);for(int i=1;i<=n;i++) { scanf("%d",&num); updat(1,i,num); } while(t--){scanf("%s",ss);if(ss[0]=='Q'){scanf("%d%d",&l,&r); maxin(1,l,r); printf("%d\n",max); max=-inf;}if(ss[0]=='U') { scanf("%d%d",&l,&r); updat(1,l,r); } }}return 0; }
?
轉載于:https://www.cnblogs.com/cancangood/p/3385796.html
總結
以上是生活随笔為你收集整理的HDU- 1754 I Hate It的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【second】Flatten Bina
- 下一篇: Python上个手