• <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年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(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é)校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數(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ù)習 數(shù)據(jù)結(jié)構(gòu), 再一次學(xué)習了 線段樹, 以前只會用它來 更新點 求和 , 現(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://m.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
            */


             

             


            亚洲国产高清精品线久久 | 色偷偷偷久久伊人大杳蕉| 久久丫忘忧草产品| 亚洲va久久久噜噜噜久久狠狠| 国产精品禁18久久久夂久| 青青青伊人色综合久久| 久久福利资源国产精品999| 久久夜色精品国产噜噜麻豆| 久久精品无码一区二区三区| 欧美大战日韩91综合一区婷婷久久青草| 欧美日韩精品久久久久| 一级做a爰片久久毛片16| 亚洲精品无码久久久久| 久久国产成人亚洲精品影院| 亚洲熟妇无码另类久久久 | 久久精品国产福利国产琪琪| 久久人人爽人人人人爽AV| 狠狠色丁香婷综合久久| 四虎影视久久久免费| 97久久精品国产精品青草| 精品国产乱码久久久久久人妻| 精品国产91久久久久久久a| 2021少妇久久久久久久久久| 中文字幕久久精品| 精品久久久久久无码人妻蜜桃 | 少妇久久久久久被弄高潮| 午夜精品久久久内射近拍高清 | 久久AV高清无码| 久久青青草原亚洲av无码app| 久久伊人五月丁香狠狠色| 四虎影视久久久免费观看| 国产精品免费久久久久久久久| 久久91精品久久91综合| 久久久久人妻精品一区| 国内精品久久久久久99| 色8久久人人97超碰香蕉987| 亚洲av伊人久久综合密臀性色| 色综合久久久久无码专区| 色狠狠久久AV五月综合| 国产精品99久久免费观看| 色综合久久天天综合|