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

            coreBugZJ

            此 blog 已棄。

            數(shù)組中的頻度——算法作業(yè) 2.1,EOJ 1049

            數(shù)組中的頻度

            Time Limit:4000MS Memory Limit:30000KB

            Description

            設(shè)A[1..n] 是一個(gè)由n 個(gè)整數(shù)組成的數(shù)組,x 是一個(gè)整數(shù),給出一個(gè)分治算法,要求找出 x 在數(shù)組 A 中的頻度,即 x 在A 中出現(xiàn)的次數(shù)。

            Input

            輸入的第一行為兩個(gè)正整數(shù),n(0<=n<=100000)和m(0<m<50000),n表示數(shù)組A有幾個(gè)元素,m表示需要查找的x的個(gè)數(shù)。
            接下去的n行,每行一個(gè)整數(shù),范圍為0到2^31,表示數(shù)組A中的元素Ai
            再接下去的m行,每行一個(gè)整數(shù)mi(0<=mi<=2^31),表示你要查找mi在數(shù)組A出現(xiàn)的次數(shù)

            (提示:對于大規(guī)模的輸入,請使用scanf而不是cin)

            Output

            輸行為m行,每行一個(gè)整數(shù),表示對于每一個(gè)mi,輸出mi在數(shù)組A中出現(xiàn)的次數(shù)。

            Sample Input

            5 2
            1
            2
            3
            1
            5
            1
            4

            Sample Output

            2
            0



            快速排序,然后二分查找

             1#include <stdio.h>
             2 
             3#define  L  100009
             4 
             5int n, m, a[ L ], cnt[ L ];
             6 
             7void sort( int h, int t ) {
             8        int i, j, x;
             9        if ( h >= t ) {
            10                return;
            11        }

            12        i = h;
            13        j = t;
            14        x = a[ h ];
            15        while ( i < j ) {
            16                while ( (i<j) && (x<=a[j]) ) {
            17                        --j;
            18                }

            19                if ( i < j ) {
            20                        a[ i++ ] = a[ j ];
            21                }

            22                while ( (i<j) && (a[i]<=x) ) {
            23                        ++i;
            24                }

            25                if ( i < j ) {
            26                        a[ j-- ] = a[ i ];
            27                }

            28        }

            29        a[ i ] = x;
            30        sort( h, i - 1 );
            31        sort( i + 1, t );
            32}

            33 
            34void init() {
            35        int i, t;
            36        sort( 0, n-1 );
            37        t = 1;
            38        cnt[ 0 ] = 1;
            39        for ( i = 1; i < n; ++i ) {
            40                if ( a[ i ] == a[ i - 1 ] ) {
            41                        ++cnt[ t-1 ];
            42                }

            43                else {
            44                        a[ t ] = a[ i ];
            45                        cnt[ t++ ] = 1;
            46                }

            47        }

            48        n = t;
            49}

            50 
            51int query( int x ) {
            52        int low = 0, high = n-1, mid;
            53        while ( low <= high ) {
            54                mid = ( low + high ) / 2;
            55                if ( x < a[ mid ] ) {
            56                        high = mid - 1;
            57                }

            58                else if ( a[ mid ] < x ) {
            59                        low = mid + 1;
            60                }

            61                else {
            62                        return cnt[ mid ];
            63                }

            64        }

            65        return 0;
            66}

            67 
            68int main() {
            69        int i, x;
            70        scanf( "%d%d"&n, &m );
            71        for ( i = 0; i < n; ++i ) {
            72                scanf( "%d", a+i );
            73        }

            74        init();
            75        while ( m-- > 0 ) {
            76                scanf( "%d"&x );
            77                printf( "%d\n", query(x) );
            78        }

            79        return 0;
            80}

            81

            posted on 2011-03-28 19:34 coreBugZJ 閱讀(496) 評論(2)  編輯 收藏 引用 所屬分類: 課內(nèi)作業(yè)

            Feedback

            # re: 數(shù)組中的頻度——算法作業(yè) 2.1,EOJ 1049 2011-04-08 22:23 老頭顏

            厲害!??!牛叉!!  回復(fù)  更多評論   

            # re: 數(shù)組中的頻度——算法作業(yè) 2.1,EOJ 1049 2011-04-08 22:24 老頭顏

            @老頭顏
            學(xué)習(xí)之  回復(fù)  更多評論   


            日本欧美久久久久免费播放网| 久久水蜜桃亚洲av无码精品麻豆| 久久96国产精品久久久| 女人香蕉久久**毛片精品| 国产午夜电影久久| 高清免费久久午夜精品| 丁香狠狠色婷婷久久综合| 国产毛片久久久久久国产毛片 | 久久亚洲精品无码VA大香大香| 性做久久久久久免费观看| 久久精品国产亚洲av水果派| 曰曰摸天天摸人人看久久久| 久久久久国产精品嫩草影院| 精品久久久久久国产91| 蜜桃麻豆WWW久久囤产精品| 国产精品美女久久久久网| 久久婷婷五月综合国产尤物app | 久久se精品一区二区影院| 99久久夜色精品国产网站| 国产精品成人精品久久久| 18岁日韩内射颜射午夜久久成人| 91久久福利国产成人精品| 久久久久久亚洲AV无码专区| 性高湖久久久久久久久AAAAA| 青青草国产精品久久| 久久w5ww成w人免费| 久久人人爽人人人人片av| 青青热久久国产久精品 | 精品一区二区久久| 久久久久久人妻无码| 久久中文字幕人妻丝袜| 亚洲人成电影网站久久| 久久亚洲AV无码精品色午夜 | 国产99久久久国产精品小说| 国产农村妇女毛片精品久久| 久久亚洲欧美日本精品| 久久婷婷五月综合97色| 伊人久久大香线蕉av不卡| 亚洲色婷婷综合久久| 日本人妻丰满熟妇久久久久久| 久久精品水蜜桃av综合天堂|