• <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

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

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

             

            題目地址:

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

            題目描述:

            Find the nondecreasing subsequences

            Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
            Total Submission(s): 211    Accepted Submission(s): 80


            Problem Description
            How many nondecreasing subsequences can you find in the sequence S = {s1, s2, s3, ...., sn} ? For example, we assume that S = {1, 2, 3}, and you can find seven nondecreasing subsequences, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}.
             

            Input
            The input consists of multiple test cases. Each case begins with a line containing a positive integer n that is the length of the sequence S, the next line contains n integers {s1, s2, s3, ...., sn}, 1 <= n <= 100000, 0 <= si <= 2^31.
             

            Output
            For each test case, output one line containing the number of nondecreasing subsequences you can find from the sequence S, the answer should % 1000000007.
             

            Sample Input
            3 1 2 3
             

            Sample Output
            7
             

             題目分析: 

                     整整一天的時(shí)間, 終于是把這個(gè)題A了  ,HDU 第一,  紀(jì)念下.....................

            1HUT-MiYu375MS1824K2358BG++

            2010-08-27 09:44:32 

             但也沒(méi)有什么值得高興的,  題目的思路是 小A 的,  0rz.......................  現(xiàn)在還是沒(méi)有理解樹(shù)狀數(shù)組是怎么解這一題的,  它的思路是怎樣的,

            一點(diǎn)也沒(méi)明白,   剛開(kāi)始做的時(shí)候, 還以為 輸入數(shù)據(jù)已經(jīng)是按非遞減排序了, 所以直接用 公式 2^n - 1, WA ...

            .....  問(wèn)過(guò)小A 才發(fā)現(xiàn), 輸入數(shù)據(jù)是 隨機(jī)的.  這時(shí)就要像找上升子串一樣, 找到它 所有的上升子串.  這里用到了 樹(shù)狀數(shù)組, 繼續(xù)理解-ing......

             

            先發(fā)代碼 :

             

            /*
            MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(zhuǎn)載自 ______________白白の屋
                      http://www.cnblog.com/MiYu
            Author By : MiYu
            Test      : 1
            Program   : 2227 
            */

            #include <iostream>
            #include <algorithm>
            using namespace std;
            #define lowbit(x) (x&(-x))
            int num[100005];
            int numcopy[100005];
            int hash[100005];
            int com[100005];
            int nCount = 1;
            void add ( int x,int k )
            {
                 while ( x <= nCount )
                 {
                       com[x] += k;
                       if ( com[x] >= 1000000007 ) com[x] %= 1000000007;
                       x += lowbit(x); 
                 } 
            }
            int sum ( int x )
            {
                int s = 0;
                while ( x > 0 )
                {
                       s += com[x];
                       if ( s >= 1000000007 ) s %= 1000000007;
                       x -= lowbit(x);
                } 
                return s %= 1000000007;
            }
            int cmp (const void *a, const void *b)
            {
                return *((int*)a) - *((int*)b); 
            }
            int sfind ( int x )
            {
                int *p = (int *)bsearch ( &x,hash+1,nCount+1,sizeof ( int ),cmp ); 
                return p - hash;
            }
            int find(int num){
                int top=1,bottom=nCount,mid=(top+bottom)/2,ans=mid;
                while(num!=hash[ans]){
                    if(hash[mid]<=num){
                        top=(ans=mid)+1;
                    }else{
                        bottom=mid-1;
                    }
                    mid=(top+bottom)/2;
                }
                return ans;
            }

            inline bool scan_d(int &num)  //整數(shù)輸入
            {
                    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;
                while ( scan_d ( N ) )
                {
                       for ( int i = 0; i != N; ++ i )
                           scan_d ( num[i] ),numcopy[i] = num[i];
                       sort ( num, num + N );
                       memset ( com,0,sizeof (com) );
                       nCount = 1;
                       hash[1] = num[0];
                       for ( int i = 1; i < N; ++ i )
                       {
                             if ( num[i] != num[i-1] )
                                  hash[++nCount] = num[i]; 
                       } 
                       for ( int i = 0; i < N; ++ i )
                       {
                            int pos = find ( numcopy[i] ); 
                            int res = sum ( pos ) + 1;
                            add ( pos,res );
                       }
                       cout << sum ( nCount ) << endl;
                }
                return 0;
            }

             

             

            18岁日韩内射颜射午夜久久成人 | 久久久久久久97| 久久精品中文无码资源站| 亚洲午夜精品久久久久久人妖| 久久国产精品偷99| 日产精品99久久久久久| 国产成人香蕉久久久久| 欧美亚洲国产精品久久高清| 国产高潮国产高潮久久久| 欧美亚洲另类久久综合婷婷| 久久精品国产亚洲77777| 久久一区二区三区99| 激情伊人五月天久久综合| 久久精品国产精品亚洲艾草网美妙| 亚洲国产精品无码久久98| 久久久艹| 久久亚洲综合色一区二区三区| 久久精品日日躁夜夜躁欧美| 久久93精品国产91久久综合| 国产精品99精品久久免费| 久久精品国产亚洲AV久| 人妻少妇精品久久| 国产激情久久久久影院| 久久99国产精品久久久| 久久综合狠狠综合久久综合88 | 伊人久久大香线蕉av不卡| 精品熟女少妇aⅴ免费久久| 国产日产久久高清欧美一区| 伊人久久无码中文字幕| 久久久www免费人成精品| 久久只这里是精品66| 久久丝袜精品中文字幕| 国产综合精品久久亚洲| 国产精品丝袜久久久久久不卡 | 中文字幕精品久久| 亚洲人成无码久久电影网站| 日韩十八禁一区二区久久| 久久综合九色综合久99| 伊人久久国产免费观看视频| 伊人久久成人成综合网222| 亚洲国产日韩欧美久久|