青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋    

 

題目地址:

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

題目描述:

Counting Sequences

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others)
Total Submission(s): 312    Accepted Submission(s): 105


Problem Description
For a set of sequences of integers{a1,a2,a3,...an}, we define a sequence{ai1,ai2,ai3...aik}in which 1<=i1<i2<i3<...<ik<=n, as the sub-sequence of {a1,a2,a3,...an}. It is quite obvious that a sequence with the length n has 2^n sub-sequences. And for a sub-sequence{ai1,ai2,ai3...aik},if it matches the following qualities: k >= 2, and the neighboring 2 elements have the difference not larger than d, it will be defined as a Perfect Sub-sequence. Now given an integer sequence, calculate the number of its perfect sub-sequence.
 

Input
Multiple test cases The first line will contain 2 integers n, d(2<=n<=100000,1<=d=<=10000000) The second line n integers, representing the suquence
 

Output
The number of Perfect Sub-sequences mod 9901
 

Sample Input
4 2 1 3 7 5
 

Sample Output
4
 

題目分析 :

( 線段樹 || 樹狀數組 ) + DP  

可以使用線段樹 或 樹狀數組來做,  可惜本人現在還不會線段樹, 下面是 樹狀數組 解題的分析 :

因為題目要求的 是 k >= 2 ,  而且 相鄰元素 之差的絕對值 不大于 d,  這里糾結了很久 , 一直沒明白 "and the

neighboring 2 elements have the difference not larger than d" 這句話的意思, 英語水平太差了.  最后在

Amb 的解釋下才明白,  0rz...........  

為了使問題簡單化, 我們不凡討論 k >= 1 的情況:

 因為 輸入數據的范圍比較大,  2<=n<=100000,1<=d=<=10000000 , 所以先要將 數據排序后 用 hash[max] 做離散化處理.

當然, 原數組需要另開一個數組保存起來. 處理完成后,  我們可以這樣理解 :   用樹狀數組 com[pos], ( pos 為 num 在 hash 數組中的位

置 ) . 記錄 能與 num 構成 完美串的個數.     初始狀態的 完美子串 為0, 每次加入一個數, 那么這個數 num 與 比他小且差不超過d的第一

個數 而且與 比他大且差不超過d的第一個數  構成完美串 . 更新樹狀數組. 最后求出所有的子串和 sum,  因為算法是以 k >= 1 來做的,而

題目要求 k >= 2, 也就是說, 對 N 個數, 就多計算了 N 次, 因此 (sum - N ) % 9901 即為所求. ( 別忘了MOD....... )

 

代碼如下 :

/*
MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋
          http://www.cnblog.com/MiYu
Author By : MiYu
Test      : 1
Program   : 3450
*/

#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 100010;
const int MOD = 9901;
int nCount = 0;
int com[MAX];
int hash[MAX];
int num1[MAX];
int num2[MAX];
int N,D;
inline int low ( int x ) {
       return x & ( -x );
}
void modify ( int x, int val ){     // 修改 
     while ( x <= nCount ){
            com[x] += val; x += low ( x );
     }     
}
int quy ( int x ){                  // 查詢 
    int sum = 0;
    while ( x > 0 ){
           sum += com[x]; x -= low ( x );
    }
    return sum ;
}
int find1 ( int val ){         // 二分 找 <= val 的第一個數 
    int beg = 1, end = nCount; int mid = ( beg + end ) >> 1; int res = mid;
    while ( beg <= end ){
           if ( hash[mid] <= val ){
                beg = mid + 1; res = mid;
           }else{
                end = mid - 1; 
           }
           mid = ( beg + end ) >> 1;
    }
    return res;
}
int find2 ( int val ){         // 二分 找 <= val 的第一個數 
    int beg = 1, end = nCount; int mid = ( beg + end ) >> 1; int res = mid;
    while ( beg <= end ){
           if ( hash[mid] < val ){
                beg = mid + 1;
           }else{
                end = mid - 1; res = mid;
           }
           mid = ( beg + end ) >> 1;
    }
    return res;
}
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 ()
{
    while ( scan_d ( N ) && scan_d ( D ) ){
           for ( int i = 0; i < N; ++ i ){
                scan_d ( num1[i] );  num2[i] = num1[i];  
           }
           sort ( num1, num1 + N );
           hash[1] = num1[0];  nCount = 1;
           for ( int i = 1; i < N; ++ i ){               // 數據 離散化 
                if ( num1[i] != num1[i-1] ) hash[++nCount] = num1[i];
           }
           memset ( com, 0, sizeof ( com ) );
           for ( int i = 0; i < N; ++ i ){
                int pos = find1 ( num2[i] );             // 找當前元素的 hash 下標   
                int pre = find1 ( num2[i] + D );         // 找 <=  num2[i] + D 的第一個數 
                int tail = find2 ( num2[i] - D );        // 找 >= num2[i] - D  的第一個數 
                int val = quy ( pre ) - quy ( tail - 1 ) + 1;  // 區間 [ num2[i] - D, num2[i] + D ] 的元素個數 + 新增的一個元素 
                modify ( pos, val % MOD );
           }
           cout << ( quy ( nCount ) - N  ) % MOD << endl;  //以 一個元素 的 [ elem - D, elem + D ] 計算, 題目要求 k >= 2, 減掉 N 個 
    }
    return 0;
}

 

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美a级片网| 久久久噜噜噜久噜久久| 久久免费国产精品1| 小处雏高清一区二区三区| 欧美日韩一级黄| 亚洲激情一区二区| 日韩视频免费观看高清在线视频 | 欧美亚洲一区二区在线观看| 一区二区三区四区五区在线| 欧美成人精品在线视频| 欧美成年人视频网站| 亚洲国产成人精品久久久国产成人一区| 欧美中文字幕视频| 欧美日本免费| 亚洲国产综合91精品麻豆| 久久久久网站| 久久伊伊香蕉| 亚洲视频在线视频| 久久久噜噜噜久久狠狠50岁| 亚洲电影免费观看高清| 欧美午夜无遮挡| 久久精品99国产精品| 亚洲精品偷拍| 欧美中文字幕在线播放| 午夜精品美女自拍福到在线| 亚洲大片免费看| 在线播放精品| 国产乱码精品一区二区三区五月婷 | 国产精品久久久久一区| 久久最新视频| 欧美日韩一区二区三区高清| 国产精品一香蕉国产线看观看| 娇妻被交换粗又大又硬视频欧美| 欧美视频不卡| 欧美日韩精品一区二区| 久久久午夜视频| 欧美日韩ab| 国产日韩亚洲欧美精品| 欧美+日本+国产+在线a∨观看| 欧美久久久久久久久| 国产精品三上| 国产精品观看| 欧美视频精品在线观看| 国产欧美精品在线播放| 欧美日韩亚洲一区二| 国产主播一区二区三区| 国产欧美日韩91| 亚洲理论在线| 国产日韩欧美视频在线| 亚洲另类一区二区| 久久蜜桃香蕉精品一区二区三区| 一本色道久久综合亚洲精品小说 | 久久婷婷综合激情| 国产精品视频不卡| 亚洲午夜视频在线| 亚洲欧美中文日韩在线| 欧美激情片在线观看| 美女网站在线免费欧美精品| 欧美在线一二三区| 麻豆国产va免费精品高清在线| 久久精品国产一区二区三区免费看 | 久久亚洲综合| 欧美日韩中文字幕日韩欧美| 国产一区视频在线观看免费| 国产午夜精品美女视频明星a级| 亚洲手机成人高清视频| 国语自产偷拍精品视频偷 | 欧美mv日韩mv国产网站| 国产亚洲激情视频在线| 蜜桃久久精品一区二区| 国产精品黄页免费高清在线观看| 亚洲电影激情视频网站| 亚洲综合视频网| 亚洲精品免费一二三区| 亚洲免费av电影| 美女诱惑一区| 久久成人这里只有精品| 国产美女在线精品免费观看| 亚洲婷婷综合色高清在线| 欧美电影在线免费观看网站| 久久riav二区三区| 欧美新色视频| 久久久国产精品一区二区三区| 99re66热这里只有精品3直播| 噜噜噜91成人网| 怡红院精品视频| 美日韩精品视频免费看| 久久精品麻豆| 国产精品乱码一区二区三区| 娇妻被交换粗又大又硬视频欧美| 亚洲人成网站精品片在线观看| 女仆av观看一区| 亚洲女人小视频在线观看| 好吊视频一区二区三区四区 | 久久综合九色欧美综合狠狠| 国内精品美女在线观看| 久久这里只有精品视频首页| 久久青草久久| 日韩午夜中文字幕| 欧美日韩国产成人| 亚洲一区二区三区四区五区黄| 久久中文在线| 久久嫩草精品久久久久| 亚洲精品少妇网址| 日韩一级大片在线| 亚洲激情在线激情| 亚洲高清中文字幕| 欧美精品在线观看播放| 这里只有精品视频| 亚洲一区三区视频在线观看 | 亚洲毛片网站| 国产乱码精品一区二区三区五月婷| 久久久91精品国产一区二区三区| 久久9热精品视频| 亚洲国产天堂久久综合网| 亚洲国产一区在线| 亚洲人成欧美中文字幕| 亚洲免费影视| 国产亚洲欧美日韩一区二区| 亚洲一二三区在线| 欧美一区网站| 亚洲精品一区二区三区福利| 亚洲毛片在线看| 国产日韩精品综合网站| 91久久精品国产91久久性色tv| 国产精品激情| 亚洲国产小视频| 欧美日韩国产a| 亚洲国产精品精华液2区45| 国产精品乱码妇女bbbb| 男女精品视频| 国产精品一区二区久久久| 欧美大色视频| 国产精品一区视频| 最新亚洲激情| 亚洲人成网在线播放| 午夜视频在线观看一区二区三区 | 老鸭窝亚洲一区二区三区| 亚洲一区精品电影| 男同欧美伦乱| 麻豆成人在线播放| 久久精品道一区二区三区| 99re6这里只有精品视频在线观看| 亚洲最新视频在线| 国产精品a级| 最新中文字幕一区二区三区| 国产欧美一区二区在线观看| 亚洲精品在线电影| 亚洲欧洲中文日韩久久av乱码| 性欧美超级视频| 午夜精品久久久久久99热| 模特精品在线| 免费毛片一区二区三区久久久| 在线视频观看日韩| 久久精品男女| 久久久久国产精品一区二区| 欧美日韩亚洲一区二区| 亚洲激情成人在线| 亚洲精品中文在线| 免费久久99精品国产自在现线| 久久免费视频观看| 欧美午夜宅男影院| 最新日韩精品| 久久久噜久噜久久综合| 国产精品久久久久久久久久ktv| 亚洲电影激情视频网站| 亚洲高清在线播放| 久久三级视频| 美女黄毛**国产精品啪啪| 久久一综合视频| 99精品福利视频| 在线视频欧美日韩| 国产精品高潮呻吟视频| 亚洲在线1234| 久久精品毛片| 亚洲高清久久网| 欧美主播一区二区三区美女 久久精品人 | 亚洲精品视频在线观看免费| 99精品视频免费在线观看| 欧美日韩成人免费| 亚洲图片你懂的| 久久九九全国免费精品观看| 亚洲高清不卡av| 欧美高清视频在线观看| 亚洲狼人综合| 久久久精品国产99久久精品芒果| 黄色成人在线网址| 欧美精品一区二区三区久久久竹菊| 亚洲精品欧洲| 欧美夜福利tv在线| 国产精品久久久久影院色老大| 老司机精品视频一区二区三区| 亚洲国产一区二区三区a毛片| 亚洲在线观看视频| 伊人激情综合| 欧美日韩在线免费观看| 欧美怡红院视频| 久久激情综合| 先锋影音久久| 亚洲国产乱码最新视频|