hdu 3450 树状数组
思路:二分查找位置,之后是裸的树状数组。
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<vector>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pb push_back
#define mp make_pair
#define Maxn 100010
#define Maxm 200010
#define LL int
#define Abs(x) ((x)>0?(x):(-x))
#define lson(x) (x<<1)
#define rson(x) (x<<1|1)
#define inf 100000
#define lowbit(x) (x&(-x))
#define clr(x,y) memset(x,y,sizeof(x))
#define Mod 9901
using namespace std;
int val[Maxn],sorted[Maxn],n,cnt;
LL C[Maxn];
void update(int pos,LL val)
{
int i;
while(pos<=n){
C[pos]+=val;
C[pos]%=Mod;
pos+=lowbit(pos);
}
}
LL Sum(int pos)
{
LL sum=;
while(pos){
sum+=C[pos];
pos-=lowbit(pos);
sum%=Mod;
}
return sum;
}
int main()
{
int d,i,j;
while(scanf("%d%d",&n,&d)!=EOF){
clr(C,);
for(i=;i<=n;i++){
scanf("%d",val+i);
sorted[i]=val[i];
}
sort(sorted+,sorted+n+);
cnt=;
for(i=;i<=n;i++)
if(sorted[i]!=sorted[cnt])
sorted[++cnt]=sorted[i];
int l,r,pos;
LL ans=,temp;
pos=lower_bound(sorted+,sorted+cnt+,val[])-sorted;
update(pos,);
for(i=;i<=n;i++){
temp=;
l=lower_bound(sorted+,sorted+cnt+,val[i]-d)-sorted;
r=lower_bound(sorted+,sorted+cnt+,val[i]+d)-sorted;
pos=lower_bound(sorted+,sorted+cnt+,val[i])-sorted;
if(sorted[l]>=val[i]-d) l--;
if(sorted[r]>val[i]+d||r>cnt) r--;
LL rr=Sum(r);
LL ll=Sum(l);
temp+=(rr-ll+Mod);
update(pos,temp+);
ans+=temp;
ans%=Mod;
}
printf("%d\n",ans%Mod);
}
return ;
}
hdu 3450 树状数组的更多相关文章
- hdu 4638 树状数组 区间内连续区间的个数(尽可能长)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 4777 树状数组+合数分解
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2852 (树状数组+无序第K小)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意:操作①:往盒子里放一个数.操作②:从盒子里扔掉一个数.操作③:查询盒子里大于a的第K小 ...
- HDU 4911 (树状数组+逆序数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4911 题目大意:最多可以交换K次,就最小逆序对数 解题思路: 逆序数定理,当逆序对数大于0时,若ak ...
- hdu 5792(树状数组,容斥) World is Exploding
hdu 5792 要找的无非就是一个上升的仅有两个的序列和一个下降的仅有两个的序列,按照容斥的思想,肯定就是所有的上升的乘以所有的下降的,然后再减去重复的情况. 先用树状数组求出lx[i](在第 i ...
- HDU 1934 树状数组 也可以用线段树
http://acm.hdu.edu.cn/showproblem.php?pid=1394 或者是我自己挂的专题http://acm.hust.edu.cn/vjudge/contest/view. ...
- 2018 CCPC网络赛 1010 hdu 6447 ( 树状数组优化dp)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 思路:很容易推得dp转移公式:dp[i][j] = max(dp[i][j-1],dp[i-1][j ...
- 【模板】HDU 1541 树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=1541 题意:给你一堆点,每个点右一个level,为其右下方所有点的数量之和,求各个level包含的点数. 题解: ...
- hdu 5147 树状数组
题意:求满足a<b<c<d,A[a]<A[b],A[c]<A[d]的所有四元组(a,b,c,d)的个数 看到逆序对顺序对之类的问题一开始想到了曾经用归并排序求逆序对,结果 ...
随机推荐
- hdu1213 How Many Tables
How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- PostgreSQL的AnynonArray的例子
程序: CREATE OR REPLACE FUNCTION kappend(anynonarray, anyelement) RETURNS text AS $$ ; $$ LANGUAGE SQL ...
- mysql主从同步单个表实验记录
问题的提出: 在CRM管理系统与运营基础数据平台之间需要有数据表进行交换,说是交换,其实是单向的,就是CRM里面的一些数据需要实时同步到运营基础数据平台中. 解决方案: A.采用时间戳的办法进行代码开 ...
- Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) A. Slime Combining 水题
A. Slime Combining 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2768 Description Your frien ...
- C#打包制作安装程序过程全记录
该文是根据网上的文章并结合自己实际打包的过程而整理的. 开发平台:VisualStudio2005中文版. 步骤如下: 1. 创建一个安装向导项目或安装部署项目 新建项目-〉其他项目类型-〉安装与部署 ...
- JLayer初体验。。
Java最近推出的JLayer虽然和sharped window or translucent window一起有位JavaFX的开发做准备之嫌,但是试了一下还是感觉不错滴.. JLayer 和 gl ...
- nginx 流媒体 flv 播放 以及上传大小 配置文件设置
nginx 流媒体 flv 播放 以及上传大小 配置文件设置 server {listen 80;server_name localhost;root /www/web/default;index ...
- Objective-C面向对象的编程
Objective-C面向对象的编程 目录 对面向对象编程思想的理解 类的声明和定义 类的声明和定义 对关键字super和self的理解 初始化函数 @property声明类成员 类的实例化 继承 组 ...
- C# 中传递多个参数给多线程
1.方式一:使用ParameterizedThreadStart委托 如果使用了ParameterizedThreadStart委托,线程的入口必须有一个object类型的参数,且返回类型为void. ...
- Android root 原理
Android root 原理 0x00 关于root linux和类Unix系统的最初设计都是针对多用户的操作系统,对于用户权限的管理很非常严格的,而root用户(超级用户)就是整个系统的唯一管理员 ...