• <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年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(24)

            隨筆分類(lèi)(332)

            隨筆檔案(182)

            FRIENDS

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(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í)慣。老師們很喜歡詢問(wèn),從某某到某某當(dāng)中,分?jǐn)?shù)最高的是多少。
            這讓很多學(xué)生很反感。

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

            Input
            本題目包含多組測(cè)試,請(qǐng)?zhí)幚淼轿募Y(jié)束。
            在每個(gè)測(cè)試的第一行,有兩個(gè)正整數(shù) N 和 M ( 0<N<=200000,0<M<5000 ),分別代表學(xué)生的數(shù)目和操作的數(shù)目。
            學(xué)生ID編號(hào)分別從1編到N。
            第二行包含N個(gè)整數(shù),代表這N個(gè)學(xué)生的初始成績(jī),其中第i個(gè)數(shù)代表ID為i的學(xué)生的成績(jī)。
            接下來(lái)有M行。每一行有一個(gè)字符 C (只取'Q'或'U') ,和兩個(gè)正整數(shù)A,B。
            當(dāng)C為'Q'的時(shí)候,表示這是一條詢問(wèn)操作,它詢問(wèn)ID從A到B(包括A,B)的學(xué)生當(dāng)中,成績(jī)最高的是多少。
            當(dāng)C為'U'的時(shí)候,表示這是一條更新操作,要求把ID為A的學(xué)生的成績(jī)更改為B。
             

            Output
            對(duì)于每一次詢問(wèn)操作,在一行里面輸出最高成績(jī)。
             

            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
             

             

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

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

            個(gè) RMQ 的裸題了, HAPPY 一下....

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

            YCH 吧.   不過(guò)看了 shǎ崽 大神 博客的 線段樹(shù)專輯后, 發(fā)現(xiàn) 用線段樹(shù)處理 這類(lèi)問(wè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
            */


             

             


            久久免费国产精品| 精品一久久香蕉国产线看播放| 人人狠狠综合久久亚洲| 久久婷婷色香五月综合激情| 一本色综合网久久| 久久久久久久99精品免费观看| 久久久久久久久久久免费精品 | 久久精品无码专区免费东京热| 久久精品国产亚洲精品2020| 9191精品国产免费久久| 麻豆精品久久久久久久99蜜桃| 国产精品久久久久久搜索| 伊人久久无码精品中文字幕| 99精品久久精品一区二区| 久久综合色老色| 91亚洲国产成人久久精品| 无码超乳爆乳中文字幕久久| 久久精品不卡| 青青热久久综合网伊人| 国产亚洲精久久久久久无码| 亚洲国产成人精品女人久久久| 一本久久a久久精品综合夜夜| 久久久久久精品成人免费图片| 国产精品熟女福利久久AV| 精品久久久噜噜噜久久久 | 久久久精品国产免大香伊 | 少妇熟女久久综合网色欲| 国产99久久九九精品无码| 久久91精品国产91久久户| 久久99国产综合精品免费| AV色综合久久天堂AV色综合在| 99久久夜色精品国产网站| 久久精品国产欧美日韩99热| 久久伊人中文无码| 国内精品伊人久久久久网站| 久久久久一区二区三区| 亚洲一区二区三区日本久久九| 久久国产精品-久久精品| 久久福利青草精品资源站| 国产福利电影一区二区三区久久久久成人精品综合 | 久久97久久97精品免视看|