【poj】2481 Cows【线段树单点更新】

原创 2016年05月31日 23:25:24

题意:

有N头牛 每头牛有一个[S,E]值 要求找出所有牛j使得Si <=Sjand Ej <= Ei and Ei - Si > Ej - Sj 对每头牛输出这样的牛的个数

题解:

先对所有牛按左端点为第一关键字升序右端点第二关键字降序排序,线段树内存右端点的值,然后每次query的是query当前节点的右端点到N的线段树和,这题还有一个就是去重,如果后一个和前一个一摸一样就直接把前面一个答案copy过来就好

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N=1e5+5;
struct COW
{
    int st,ed,id;
    COW(){}
    COW(int a,int b,int c){st=a;ed=b;id=c;}
    bool operator<(const COW &b)const
    {return st<b.st||(st==b.st&&ed>b.ed);}
}cow[N];
int res[N],n,tree[N<<2],a,b;
void update(int pos,int l,int r,int rt)
{
    tree[rt]++;
    if(l==r)return;
    int mid=(l+r)>>1;
    if(pos<=mid)update(pos,lson);
    else update(pos,rson);
}
int query(int L,int R,int l,int r,int rt)
{
    if(L<=l&&r<=R)return tree[rt];
    int mid=(l+r)>>1,sum=0;
    if(L<=mid) sum+=query(L,R,lson);
    if(R>=mid) sum+=query(L,R,rson);
    return sum;
}
int main()
{
    while(scanf("%d",&n)&&n){
        for(int i=0;i<n;i++){
            scanf("%d%d",&a,&b);
            cow[i]=COW(a,b,i);
        }
        sort(cow,cow+n);
        memset(tree,0,sizeof(tree));
        for(int i=0;i<n;i++){
            if(i&&cow[i].st==cow[i-1].st&&cow[i].ed==cow[i-1].ed)
                res[cow[i].id]=res[cow[i-1].id];
            else res[cow[i].id]=query(cow[i].ed,N,0,N,1);
            update(cow[i].ed,0,N,1);
        }
        for(int i=0;i<n;i++)printf("%d%c",res[i],i==n-1?'\n':' ');
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ 2481 Cows(线段树[单点更新])

POJ 2481 Cows(线段树[单点更新])

POJ - 2481 Cows(线段树单点更新)

题意: 两个区间:[Si, Ei] 和 [Sj, Ej] (0 <= S < E <= 10^5) 若 Si <= Sj,且 Ej Ej - Sj, 则第i个区间覆盖第j个区间,即牛i比牛...

POJ2481:Cows(线段树单点更新)

Description Farmer John's cows have discovered that the clover growing along the ridge of the hill ...

poj2481(线段树单点更新)

CowsFarmer John’s cows have discovered that the clover growing along the ridge of the hill (which we...

线段树单点更新 poj 2182 Lost Cows

题目链接: http://poj.org/problem?id=2182 题目意思: 已知1~n组成的一个序列中每个数的顺序数(也就是告诉前面有几个小于他的数),求该序列。 解题思路: ...

poj 2481 Cows 线段树

题目 Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 19518 Accepted: 6...

POJ--2481--Cows【线段树】

链接 :http://poj.org/problem?id=2481 题意:一条直线上长满了三叶草,有n头牛,每头牛都有喜欢的一段三叶草区间 [ si , ei ] ,如果一头牛喜欢的区间包含了另一...

POJ 2481 Cows 线段树

POJ 2481 Cows

[POJ 2481] Cows 线段树

http://poj.org/problem?id=2481题意:这里就是求区间覆盖问题,求每个区间被多少区间覆盖,相同两个区间的不算。思路:线段数,先将所有区间 [l, r] 按照 r 位置降序排列...

【POJ2481】cows 线段树

题目描述   农民约翰的奶牛们已经发现,越来越多的草沿山脊(看成是一个数轴)长的特别好。约翰有N头牛(编号从1到N)。每头奶牛都特别喜欢吃一定范围内的草(可能重叠)。这个范围可以看成是一个闭区间[...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)