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


             

             


            亚洲精品美女久久777777| 一级做a爰片久久毛片16| 91久久精品电影| 国产成人精品综合久久久| 久久ww精品w免费人成| 奇米综合四色77777久久| 伊人久久大香线蕉av不卡| 7777精品伊人久久久大香线蕉 | 久久综合九色综合久99| 国产成人精品久久| 国产成人久久久精品二区三区| 久久人爽人人爽人人片AV| 久久精品国产亚洲AV蜜臀色欲| 久久经典免费视频| 亚洲伊人久久综合影院| 国产精品久久婷婷六月丁香| 久久99热这里只有精品66| 色婷婷狠狠久久综合五月| 亚洲国产成人精品91久久久 | 99久久免费国产精品特黄| 一本一道久久a久久精品综合| 久久人妻无码中文字幕| 2020国产成人久久精品| 久久婷婷五月综合国产尤物app| 青青草原精品99久久精品66| 国内精品久久久久影院老司| 亚洲AV无码1区2区久久| 日韩欧美亚洲综合久久影院d3| 精品国产婷婷久久久| 人人狠狠综合88综合久久| 亚洲国产美女精品久久久久∴| 久久中文娱乐网| 午夜视频久久久久一区| 国产91久久精品一区二区| 久久激情亚洲精品无码?V| 久久天天躁狠狠躁夜夜网站| 国内精品伊人久久久久网站| 久久国产免费观看精品3| 久久久受www免费人成| 国产精品免费看久久久| 国产一区二区久久久|