poj 2481 Cows
2017-04-15 16:26
232 查看
Cows
题目链接:点击打开链接
解题思路:先将题目抽象化为一维坐标上的线段真包含关系,实例中0 3完全包括1 2,只有这一组成立的关系,所以答案为1 0 0 。
将1 2,0 3,3 4.当做二维坐标来看放到二维坐标系中来看,转化成求一个点的左上方有多少点,类似于poj 2352;
所以解题思路就欧了;
代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define MAXN 100005
using namespace std;
int tree[MAXN];
int n;
int ans[MAXN];
struct Node{
int s,e,id;
};
int cmp(Node a,Node b)
{
if(a.e!=b.e)
return a.e>b.e;
else
return a.s<b.s;
}
void add(int x)
{
for(int i=x;i<=n;i+=i&-i)
tree[i]+=1;
}
int read(int x)
{
int sum=0;
for(int i=x;i>0;i-=i&-i)
sum+=tree[i];
return sum;
}
int main()
{
Node in[MAXN];
while(scanf("%d",&n),n)
{
memset(tree,0,sizeof(tree));
memset(ans,0,sizeof(ans));
for(int i=1;i<=n;i++)
{
scanf("%d%d",&in[i].s,&in[i].e);
in[i].id=i;
in[i].s++;in[i].e++; //做多了就知道0是死循环的陷阱
}
sort(in+1,in+n+1,cmp);
for(int i=1;i<=n;i++)
{
int num;
if(in[i].s==in[i-1].s && in[i].e==in[i-1].e) //区间相同时,比他强壮的牛的数量也相同
num=ans[in[i-1].id];
else
num=read(in[i].s);
add(in[i].s);
ans[in[i].id]=num;//后来加入的坐标y坐标越来越小,不会影响前面的统计,直接赋值不用++;
}
for(int i = 1 ; i <= n ; ++i)
{
printf("%d ",ans[i]) ;
}
printf("\n") ;
}
return 0;
}
题目链接:点击打开链接
解题思路:先将题目抽象化为一维坐标上的线段真包含关系,实例中0 3完全包括1 2,只有这一组成立的关系,所以答案为1 0 0 。
将1 2,0 3,3 4.当做二维坐标来看放到二维坐标系中来看,转化成求一个点的左上方有多少点,类似于poj 2352;
所以解题思路就欧了;
代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define MAXN 100005
using namespace std;
int tree[MAXN];
int n;
int ans[MAXN];
struct Node{
int s,e,id;
};
int cmp(Node a,Node b)
{
if(a.e!=b.e)
return a.e>b.e;
else
return a.s<b.s;
}
void add(int x)
{
for(int i=x;i<=n;i+=i&-i)
tree[i]+=1;
}
int read(int x)
{
int sum=0;
for(int i=x;i>0;i-=i&-i)
sum+=tree[i];
return sum;
}
int main()
{
Node in[MAXN];
while(scanf("%d",&n),n)
{
memset(tree,0,sizeof(tree));
memset(ans,0,sizeof(ans));
for(int i=1;i<=n;i++)
{
scanf("%d%d",&in[i].s,&in[i].e);
in[i].id=i;
in[i].s++;in[i].e++; //做多了就知道0是死循环的陷阱
}
sort(in+1,in+n+1,cmp);
for(int i=1;i<=n;i++)
{
int num;
if(in[i].s==in[i-1].s && in[i].e==in[i-1].e) //区间相同时,比他强壮的牛的数量也相同
num=ans[in[i-1].id];
else
num=read(in[i].s);
add(in[i].s);
ans[in[i].id]=num;//后来加入的坐标y坐标越来越小,不会影响前面的统计,直接赋值不用++;
}
for(int i = 1 ; i <= n ; ++i)
{
printf("%d ",ans[i]) ;
}
printf("\n") ;
}
return 0;
}
相关文章推荐
- poj 2481 Cows(树状数组)
- POJ 2481 Cows
- poj2481 Cows
- poj 2481 Cows(树状数组)
- POJ 2481 Cows (树状数组)
- POJ 2481 Cows
- poj 2481 Cows (树状数组)
- POJ 2481 Cows 【树状数组】
- POJ 2481 Cows(树状数组)
- POJ 2481 Cows【树状数组】
- POJ 2481 Cows 树状数组
- POJ 2481 Cows (树状数组)
- poj 2481 Cows(树状数组)
- poj 2481 Cows
- POJ-2481-COWS(树状数组)
- POJ 2352_Stars && POJ-2481 Cows (线段树单点更新+树状数组)
- POJ 2481 Cows (树状数组)
- POJ 2481 Cows (线段树||树状数组)
- POJ 2481 Cows(树状数组)
- poj 2481 Cows(哇咔咔,树状数组^ ^)