分析:首先要知道有递推公式dp[i] = Sigma(dp[j]),dp[i]表示第i个数结尾的完美子序列的个数,|a[i] - a[j]| <= d,j<i。直接这样做的时间复杂度为n^2,对于最大有100000的n还是会超时的,留意到公式是连续加的(j<i 时,以[a[i] - d, a[i] + d]区间里面的数结尾的完美子序列个数相加),其实j>i的[a[i] - d, a[i] + d]区间里面的数结尾的完美子序列个数也可以加进去,只要初始化都为0,正因为这样可以用树状数组对这种加法进行加速,只要先用二分查找出区间两端点对应在树状数组里面的下标。

 #pragma warning(disable:4996)
#include <cstdio>
#include <set>
#include <stack>
#include <vector>
#include <algorithm>
#include <map>
#define MOD 9901
using namespace std;
int bit[];//bit -- binary indexed tree
int a[], order[], len;
int lowBit(int x){
return x & (-x);
}
//size是数组的大小,val是增量
void update(int idx, int size, int val){
while (idx <= size){
bit[idx] += val;
if (bit[idx] >= MOD){
bit[idx] %= MOD;
}
idx += lowBit(idx);
}
}
//求a[1]到a[idx]的连续子序列的和
int sum(int idx){
int ret = ;
while (idx > ){
ret += bit[idx];
if (ret >= MOD){
ret %= MOD;
}
idx -= lowBit(idx);
}
return ret;
}
int main(){
int n, d, len;
while (~scanf("%d%d", &n, &d)){
for (int i = ; i <= n; i++){
scanf("%d", &a[i]);
}
copy(a + , a + + n, order + );
sort(order + , order + + n);
len = unique(order + , order + + n) - order - ;
memset(bit, , sizeof(bit));
for (int i = ; i <= n; i++){
int r = upper_bound(order + , order + + len, a[i] + d) - order - ;
int l = lower_bound(order + , order + + len, a[i] - d) - order - ;
int p = lower_bound(order + , order + + len, a[i]) - order;
int temp = sum(r) - sum(l);
temp = (temp % MOD + MOD) % MOD;
update(p, len, temp + );
}
printf("%d\n", ((sum(len) - n) % MOD + MOD) % MOD);
}
return ;
}

hdu3450的更多相关文章

随机推荐

  1. [ZJOI2005]沼泽鳄鱼

    题目描述 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了几座石墩和石桥 ...

  2. 2017杭电多校06Rikka with Graph

    Rikka with Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. 莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)

    题目传送门 /* 莫队算法:求出[l, r]上取出两只相同袜子的个数. 莫队算法是离线处理一类区间不修改查询类问题的算法.如果你知道了[L,R]的答案,可以在O(1)的时间下得到 [L,R-1]和[L ...

  4. 在计算机视觉与人工智能领域,顶级会议比SCI更重要(内容转)

    很多领域,SCI是王道,尤其在中国,在教师科研职称评审和学生毕业条件中都对SCI极为重视,而会议则充当了补充者的身份.但是在计算机领域,尤其是人工智能与机器学习领域里,往往研究者们更加青睐于会议 我无 ...

  5. 第3章 DOM

    1.节点,dom有3种节点,元素节点,文本节点,属性节点 2.元素节点是dom的原子,所有的属性节点和文本节点都被元素包含,但并不是所有的元素都包含他们 3.继承,节点树上的元素将继承父元素的样式和属 ...

  6. Python操作远程数据库

    我的项目要往数据库中插入create_time和update_time,那就势必要引用现在的系统时间,经过大量的查找,终于发现往python是没有对应时间datetime的相关通配符的,那么我们要怎么 ...

  7. Angular——单页面实例

    基本介绍 1.引入的route模块可以对路由的变化做出响应 2.创建的控制器中依然需要$http向后台请求数据 3.php中二维数据的遍历用的是foreach 4.php中$arr=array(),$ ...

  8. 4星|《OKR工作法》:关注公司的真正目标,以周为单位做计划和考核

    本书篇幅比较小,两个小时就可以看完.主要内容讲OKR工作法的基本概念,然后用一个虚拟的创业公司的创业故事来演示实施OKR过程中可能遇到的问题.OKR给创业带来的好处. OKR工作法相对来说是比较简单的 ...

  9. apache启动失败提示预期<IfModule>结果<IfModule>>

    经过反复查看httpd.conf文件,发现原因是启动了两遍<IfModule>,也就是出现内容重复标签重复曾经遇到类似的情况Apache2: Expected </> but ...

  10. POJ_3041_Asteroids

    参考自: http://user.qzone.qq.com/289065406/blog/1299322465 解题思路: 把方阵看做一个特殊的二分图(以行列分别作为两个顶点集V1.V2,其中| V1 ...