hdu3450
分析:首先要知道有递推公式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的更多相关文章
随机推荐
- php可以定义数组的常量吗
是这样吗?<?php define('BEST_PHPER',array('name'=>'巩文','address'=>'china')); My God,明确告诉你不可以:原因是 ...
- 洛谷 P3378 【模板】堆(小根堆)
题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...
- 不讲CRUSH的Ceph教程是不完整的
前面我们提到了Ceph是一个支持统一存储架构的分布式存储服务.简单介绍了Ceph的基本概念和基础架构包含的组件,其中最重要的就是底层的RADOS和它的两类守护进程OSD and Monitor.上篇文 ...
- datagrid上面的查询按钮设置了,但是分页工具栏不显示
原因:查询的linkbutton没有放在toolbar里. <script type="text/javascript"> $(function(){ $('#dg') ...
- C:\Windows\System32\drivers\etc\hosts文件显示
attrib -s -h C:\Windows\System32\drivers\etc\hosts
- CF864D Make a Permutation!
思路: 贪心,构造,模拟. 实现: #include <bits/stdc++.h> using namespace std; ], a[], vis[], n; int main() { ...
- SAS进阶《深入分析SAS》之数据汇总和展现
SAS进阶<深入分析SAS>之数据汇总和展现 1. 通过Print过程制作报表 proc print <data=数据集>; run; 选项: obs=修改观测序号列标签 no ...
- Hive扩展功能(九)--Hive的行级更新操作(Update)
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这三部机, 每部主机的用户名都为centos ...
- OpenTSDB监控
OpenTSDB监控
- Linux(Centos7) 设置静态IP
关于虚拟机 这里使用Centos7为例,因为linux是安装在在虚拟机中,这里先看一下虚拟机的网络适配器: 这里我使用的NAT模式,接着配置虚拟机的虚拟网络: 这里主要看一下VMnet8的设置: 这里 ...