Nested Segments CodeForces 652D 树状数组+离散化
2017-05-30 21:07
447 查看
传送门:CodeForces 652D
题意:给出n个区间,问每个区间包含多少区间。
思路:同时维护两个端点不好维护,我们可以按其中一个端点排序然后维护另一个端点,用树状数组维护一下就好了。
代码:#include<bits/stdc++.h>
#define ll long long
#define pi acos(-1)
#define MAXN 100010
#define inf 0x3f3f3f3f
using namespace std;
typedef pair<int,int>P;
struct node{
int l,r,id;
}a[MAXN*2];
int bit[MAXN*10];
bool cmp(node x,node y)
{
return x.r<y.r;
}
int num[MAXN*4];
int sum(int i)
{
int ans=0;
while(i>0)
{
ans+=bit[i];
i-=-i&i;
}
return ans;
}
void add(int i,int x)
{
while(i<MAXN*10)
{
bit[i]+=x;
i+=-i&i;
}
}
int res[MAXN*10];
int main()
{
int n;
cin>>n;
int cnt=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
a[i].id=i;
num[cnt++]=a[i].l;
num[cnt++]=a[i].r;
}
sort(a+1,a+n+1,cmp);
sort(num,num+cnt);
cnt=unique(num,num+cnt)-num;
for(int i=1;i<=n;i++)
{
int l=lower_bound(num,num+cnt,a[i].l)-num+1;
int r=lower_bound(num,num+cnt,a[i].r)-num+1;
res[a[i].id]=sum(r)-sum(l-1);
add(l,1);
}
for(int i=1;i<=n;i++)
printf("%d\n",res[i]);
return 0;
}
题意:给出n个区间,问每个区间包含多少区间。
思路:同时维护两个端点不好维护,我们可以按其中一个端点排序然后维护另一个端点,用树状数组维护一下就好了。
代码:#include<bits/stdc++.h>
#define ll long long
#define pi acos(-1)
#define MAXN 100010
#define inf 0x3f3f3f3f
using namespace std;
typedef pair<int,int>P;
struct node{
int l,r,id;
}a[MAXN*2];
int bit[MAXN*10];
bool cmp(node x,node y)
{
return x.r<y.r;
}
int num[MAXN*4];
int sum(int i)
{
int ans=0;
while(i>0)
{
ans+=bit[i];
i-=-i&i;
}
return ans;
}
void add(int i,int x)
{
while(i<MAXN*10)
{
bit[i]+=x;
i+=-i&i;
}
}
int res[MAXN*10];
int main()
{
int n;
cin>>n;
int cnt=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
a[i].id=i;
num[cnt++]=a[i].l;
num[cnt++]=a[i].r;
}
sort(a+1,a+n+1,cmp);
sort(num,num+cnt);
cnt=unique(num,num+cnt)-num;
for(int i=1;i<=n;i++)
{
int l=lower_bound(num,num+cnt,a[i].l)-num+1;
int r=lower_bound(num,num+cnt,a[i].r)-num+1;
res[a[i].id]=sum(r)-sum(l-1);
add(l,1);
}
for(int i=1;i<=n;i++)
printf("%d\n",res[i]);
return 0;
}
相关文章推荐
- Educational Codeforces Round 10 D. Nested Segments 离散化+树状数组
- 【Codeforces 652 D Nested Segments】+ 树状数组 + 离散化
- CF Educational Codeforces Round 10 D. Nested Segments 离散化+树状数组
- Nested Segments codeforces 652D 树状数组 +离散化
- CF#The Union of k-Segments -离散化+树状数组
- ural 1987. Nested Segments【离散化+贪心+线段树】
- Nested Segments CodeForces - 652D (树状数组,离散化)
- codeforces 652D D. Nested Segments(离散化+sort+树状数组)
- CodeForces-652D:Nested Segments(树状数组+离散化)
- bnu36905 Nested Segments 离散化+线段树
- Educational Codeforces Round 10 D. Nested Segments 离线树状数组 离散化
- 【BNU Summer Training 2014.08.11】 Nested Segments (线段树,离散化)
- Educational Codeforces Round 10 D. Nested Segments
- 大连网赛 1010 HDU5877 离散化+树状数组
- hdu 5877 - Weak Pair (2016大连网络赛) 离散化 + 树状数组
- hdu4417(离散化+树状数组)
- 解题报告-HDU 4325 (树状数组+离散化)
- poj 2299 Ultra-QuickSort(归并排序)||(树状数组+离散化)
- HDU 5101 Select --离散化+树状数组
- 【HDU - 4325 】Flowers 【树状数组+离散化】