HDOJ 5178 - pairs 离散化+树状数组..
2015-03-04 21:49
441 查看
题意:
在一串数中X[1],X[2],.....X
,问其中有多少对位a,b,满足a<b且abs(X[a]-X[b])小于一个给定的数k (n<=100000,k<=1000000000)
题解:
主要思路很太常见,从第一个数开始往后首先询问在其前面的数有多少个各与其可以组成满足条件的对,再将其插入. 用线段树或树状数组维护.由于k很大,所以需要把所有的数离散化.
我为了方便处理,将每个数的X[i]-k与X[i]+k都放到了离散的数组里面.程序写德搓..用线段树超时了..用树状数组过的..注意的是结果可以轻松爆int但不会超过long long int.
Program:
在一串数中X[1],X[2],.....X
,问其中有多少对位a,b,满足a<b且abs(X[a]-X[b])小于一个给定的数k (n<=100000,k<=1000000000)
题解:
主要思路很太常见,从第一个数开始往后首先询问在其前面的数有多少个各与其可以组成满足条件的对,再将其插入. 用线段树或树状数组维护.由于k很大,所以需要把所有的数离散化.
我为了方便处理,将每个数的X[i]-k与X[i]+k都放到了离散的数组里面.程序写德搓..用线段树超时了..用树状数组过的..注意的是结果可以轻松爆int但不会超过long long int.
Program:
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<queue> #include<stdio.h> #define oo 1<<29 #define MAXN 300005 #define ll long long using namespace std; ll T[MAXN<<2]; int a[MAXN],h[MAXN]; int search(int x,int n) { int l=0,r=n+1,mid; while (r-l>1) { mid=l+r>>1; if (x<h[mid]) r=mid; else l=mid; } return l; } void Update(int x,int n) { while (x<=n) { T[x]+=1; x+=x&(-x); } } ll Query(int x,int m) { ll ans=0; while (x) { ans+=T[x]; x-=x&(-x); } return ans; } int main() { int cases,i,n,k,d,l,r,m; ll ans; scanf("%d",&cases); while (cases--) { scanf("%d%d",&n,&k),m=0; for (i=1;i<=n;i++) scanf("%d",&a[i]), h[++m]=a[i]-k,h[++m]=a[i],h[++m]=a[i]+k; sort(h+1,h+1+m); memset(T,0,sizeof(T)),ans=0; for (i=1;i<=n;i++) { d=a[i]; l=search(d-k,m),r=search(d+k,m); ans+=Query(r,m)-Query(l-1,m); l=r=search(d,m); Update(l,m); } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- hdoj 3450 Counting Sequences 【离散化 + 树状数组优化dp】
- HDOJ 4325 —— 树状数组 + 离散化
- HDOJ 题目2227 Find the nondecreasing subsequences(树状数组,离散化,DP)
- hdoj 4358 树的线性化,树状数组,离散化
- [HDOJ4325]Flowers(树状数组 离散化)
- hdoj4991Ordered Subsequence【dp+离散化+树状数组】
- poj_2299Ultra-QuickSort,树状数组离散化
- 浅谈树状数组求逆序对及离散化的几种方式及应用
- 树状数组 hdoj1166
- 2017西安交大ACM小学期数据结构 [树状数组 离散化]
- NYOJ 117 求逆序数 (树状数组 + 离散化思路)
- lightoj 1085【离散化+树状数组】
- hdu 5493 Queue 2015合肥网络赛 树状数组 二分 离散化 贪心
- 离散化 + 线段树(树状数组) + 线扫描法
- 逆序数的求法总结(归并、线段树、树状数组、离散化)
- POJ 2299 Ultra-QuickSort(树状数组+离散化)
- HDU5792(离散化+树状数组求逆序数)树状数组求逆序深入讲解
- Nested Segments codeforces 652D 树状数组 +离散化
- POJ(2761)Feed the dogs (树状数组+离散化+贪心)
- poj2299 Ultra-QuickSort 树状数组 + 离散化