• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ACM___________________________

            ______________白白の屋
            posts - 182, comments - 102, trackbacks - 0, articles - 0
            <2010年9月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            常用鏈接

            留言簿(24)

            隨筆分類(332)

            隨筆檔案(182)

            FRIENDS

            搜索

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            MiYu原創(chuàng), 轉(zhuǎn)帖請注明 : 轉(zhuǎn)載自 ______________白白の屋    

             

            題目地址:

              http://acm.hdu.edu.cn/showproblem.php?pid=1754

            題目描述:

              

            I Hate It

            Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
            Total Submission(s): 6306    Accepted Submission(s): 2267


            Problem Description
            很多學(xué)校流行一種比較的習(xí)慣。老師們很喜歡詢問,從某某到某某當中,分數(shù)最高的是多少。
            這讓很多學(xué)生很反感。

            不管你喜不喜歡,現(xiàn)在需要你做的是,就是按照老師的要求,寫一個程序,模擬老師的詢問。當然,老師有時候需要更新某位同學(xué)的成績。
             

            Input
            本題目包含多組測試,請?zhí)幚淼轿募Y(jié)束。
            在每個測試的第一行,有兩個正整數(shù) N 和 M ( 0<N<=200000,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。
            當C為'Q'的時候,表示這是一條詢問操作,它詢問ID從A到B(包括A,B)的學(xué)生當中,成績最高的是多少。
            當C為'U'的時候,表示這是一條更新操作,要求把ID為A的學(xué)生的成績更改為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
             

             

            感覺好久沒有A題了 , 最近一直沒有狀態(tài),  豆豆也轉(zhuǎn)行了, 郁悶.......    因為打算 專精 數(shù)據(jù)結(jié)構(gòu)方面,

            所以這幾天一直都在復(fù)習(xí) 數(shù)據(jù)結(jié)構(gòu), 再一次學(xué)習(xí)了 線段樹, 以前只會用它來 更新點 求和 , 現(xiàn)在終于水了一

            個 RMQ 的裸題了, HAPPY 一下....

            對于 RMQ 的題目, 看PPT 上面的 DP 我直接0rz了...........表示DP只會做水題.... 這方面還是交給

            YCH 吧.   不過看了 shǎ崽 大神 博客的 線段樹專輯后, 發(fā)現(xiàn) 用線段樹處理 這類問題 非常方便, 修改查詢

            都是 O (logN)的 ,  稍稍優(yōu)化了下輸入, 234MS AC ........

             

            代碼如下 :

            代碼
            /*
            Coded By  : MiYu
            Link      : 
            http://www.cnblogs.com/MiYu  || http://www.shnenglu.com/MiYu
            Author By : MiYu
            Test      : 1
            Program   : 1754
            */
            //#pragma warning( disable:4789 )
            #include 
            <iostream>
            #include 
            <algorithm>
            #include 
            <string>
            #include 
            <set>
            #include 
            <map>
            #include 
            <utility>
            #include 
            <queue>
            #include 
            <stack>
            #include 
            <list>
            #include 
            <vector>
            #include 
            <cstdio>
            #include 
            <cstdlib>
            #include 
            <cstring>
            #include 
            <cmath>
            using namespace std;
            inline 
            int max ( int a, int b ){
                
            return a > b ? a : b;
            }
            typedef 
            struct seg_Tree {
                
            int left, right;
                
            int mid() { return (left+right)>>1; }
                
            int max;
            }S;
            S seg[
            605000];
            int key[200010];
            int creat ( int left, int right, int root = 1 ){
                seg[root].left 
            = left;    
                seg[root].right 
            = right; 
                
            if ( left == right )
                    
            return seg[root].max = key[left];
                
            int mid = seg[root].mid();
                
            return seg[root].max = max ( creat ( left, mid, root << 1 ),creat ( mid + 1, right, ( root << 1 ) + 1 ) );
            }

            void modify ( int val, int pos, int r = 1 ){
                
            if ( seg[r].left == seg[r].right ){
                    seg[r].max 
            = val;
                    
            return;
                }
                
            int mid = seg[r].mid();
                
            if ( pos <= mid ){
                    modify ( val, pos, r 
            << 1 );
                } 
            else {
                    modify ( val, pos, ( r 
            << 1 ) + 1 );
                }
                seg[r].max 
            = max ( seg[r<<1].max, seg[ (r<<1+ 1 ].max );
            }

            int quy ( int left, int right, int r = 1 ){
                
            if ( seg[r].left == left && seg[r].right == right ){
                    
            return seg[r].max;
                }
                
            int mid = seg[r].mid();
                
            if ( right <= mid  ){
                    
            return quy ( left, right, r << 1 );
                } 
            else if ( left > mid ) {
                    
            return quy ( left, right, (r << 1+ 1 );
                } 
            else {
                    
            return max ( quy ( left, mid, r << 1 ), quy ( mid + 1, right, (r << 1+ 1 ) );
                }
            }
            inline 
            bool scan_d(int &num)
            {
                    
            char in;bool IsN=false;
                    
            in=getchar();
                    
            if(in==EOF) return false;
                    
            while(in!='-'&&(in<'0'||in>'9')) in=getchar();
                    
            if(in=='-'){ IsN=true;num=0;}
                    
            else num=in-'0';
                    
            while(in=getchar(),in>='0'&&in<='9'){
                            num
            *=10,num+=in-'0';
                    }
                    
            if(IsN) num=-num;
                    
            return true;
            }
            int main ()
            {
                
            int N, M, x, y;
                
            while ( scan_d(N) && scan_d(M) ){
                    
            for ( int i = 1; i <= N; ++ i ){
                        scan_d( key[i] );    
                    }
                    creat ( 
            1, N );  
                    while ( M -- ){
                        
            char ask[5];
                        scanf ( 
            "%s", ask );
                        scan_d(x);
                        scan_d(y);
                        
            switch ( ask[0] ){
                            
            case 'Q':    printf ( "%d\n", quy ( x,y ) );
                                        
            break;
                            
            case 'U':    modify ( y, x );
                        }
                    }
                }
                
            return 0;
            }

            /*
            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
            */


             

             


            精品久久人人爽天天玩人人妻| 粉嫩小泬无遮挡久久久久久| 国产精品久久久久久久app| 国产成人精品综合久久久久| 97久久香蕉国产线看观看| 久久久久久久久久久免费精品| 看久久久久久a级毛片| 久久99亚洲综合精品首页| 亚洲色大成网站www久久九| 激情五月综合综合久久69| 久久久亚洲欧洲日产国码二区 | 久久精品毛片免费观看| 久久久久噜噜噜亚洲熟女综合| 久久99久久99精品免视看动漫| 四虎久久影院| 久久精品无码一区二区日韩AV| 亚洲日本va中文字幕久久| 日韩中文久久| 精品久久久久一区二区三区| 久久久久久亚洲AV无码专区| 无码国内精品久久综合88| 欧美久久久久久午夜精品| 日韩精品久久久久久| 国产精品久久免费| 久久精品aⅴ无码中文字字幕不卡| 久久久久久精品免费免费自慰| 欧美精品丝袜久久久中文字幕 | 久久久久久久精品妇女99| 久久久久亚洲AV无码专区网站| 四虎国产精品免费久久5151| 99久久人妻无码精品系列| 久久久久亚洲精品无码蜜桃| 亚洲AV无码久久精品成人| 东方aⅴ免费观看久久av| 久久人人爽人人爽人人片av麻烦| 久久久久亚洲AV无码去区首| 精品久久综合1区2区3区激情| 久久WWW免费人成—看片| 国产成人精品久久亚洲| 久久91精品综合国产首页| 久久亚洲av无码精品浪潮|