【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(线段树[单点更新])

poj2481 cows(线段树单点更新)

题目链接: huangjing 题目意思: 给出n头牛的活动区间,比如区间[SI,sj]和[EI,EJ],如果前面一个区间完全包含另外一个区间那么说明前一头牛比后一头牛强壮。 思路:根据区间的右区间...

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

Cows Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 19652   Accepted...
  • Archger
  • Archger
  • 2017年08月07日 20:39
  • 101

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

题意: 两个区间:[Si, Ei] 和 [Sj, Ej] (0

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...
  • siyutt
  • siyutt
  • 2017年07月28日 20:30
  • 58

线段树单点更新 poj 2182 Lost Cows

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

poj-2481 Cows(线段树,思路)

题目来源:http://poj.org/problem?id=2481题意在一个农场里,有n头牛,每头牛呢,喜欢吃一定范围的草,把范围看成一条直线,那么给出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 ] ,如果一头牛喜欢的区间包含了另一...
  • zzzz40
  • zzzz40
  • 2014年07月25日 22:19
  • 900
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【poj】2481 Cows【线段树单点更新】
举报原因:
原因补充:

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