poj2481树状数组

原创 2016年08月31日 09:55:12

每个牛有一个区间[s,e],两个牛[s1,e1], [s2,e2],当s1<=s2并且e1>=e2并且e1-s1>e2-s2时,我们说牛1比牛2强,给N个牛的区间,对于每个牛,输出比这个牛强的牛的个数。
还是需要预处理,先对每个牛的e进行降序排序,e相同时对s进行升序排列,这样循环时可以保证后边的牛绝对不比前边的牛强。在循环时,只需找出比当前牛s小的牛的个数。如果遇到特殊情况,即两个牛区间完全一样,赋值就可以了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn=100005;

int b[maxn];
int c[maxn];
int n;

struct cow
{
    int l,r;
    int dis;
}a[maxn];
int cmp(const cow &a,const cow &b)
{
    if(a.r==b.r)
    return a.l<b.l;
    else
    return a.r>b.r;
}
int lowbit(int x)
{
    return x&-x;
}
void update(int x,int add)
{
    while(x<=maxn)
    {
        c[x]+=add;
        x+=lowbit(x);
    }
}
int sum(int x)
{
    int ret=0;
    while(x)
    {
        ret+=c[x];
        x-=lowbit(x);
    }
    return ret;
}

int main()
{
    while(~scanf("%d",&n)&&n)
    {
        memset(c,0,sizeof(c));
        memset(b,0,sizeof(b));
        int p;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&a[i].l,&a[i].r);
            a[i].dis=i;
            a[i].l++;
            a[i].r++;
        }
        sort(a,a+n,cmp);
        for(int i=0;i<n;i++)
        {
            if(i&&a[i].l==a[i-1].l&&a[i].r==a[i-1].r)
            b[a[i].dis]=b[a[i-1].dis];
            else
            b[a[i].dis]=sum(a[i].l);
            update(a[i].l,1);
        }
        for(int i=0;i<n-1;i++)
        printf("%d ",b[i]);
        printf("%d\n",b[n-1]);
    }
    return 0;
}

poj 2481 Cows 树状数组解法,详细解析。

Farmer John's cows have discovered that the clover growing along the ridge of the hill (which we can...
  • Lionel_D
  • Lionel_D
  • 2015年02月05日 19:30
  • 1056

POJ2481 Cows (树状数组)

一看之下……完全不会的节奏啊……【尼玛、、、、 然后开始
  • u013625609
  • u013625609
  • 2014年05月13日 12:58
  • 389

poj2481 Cows(树状数组)

CowsDescriptionFarmer John’s cows have discovered that the clover growing along the ridge of the hil...
  • zhanghaoxian1
  • zhanghaoxian1
  • 2017年07月04日 11:41
  • 62

poj2481之排序+树状数组

Cows Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 11321   Accepted...
  • xingyeyongheng
  • xingyeyongheng
  • 2014年03月10日 20:41
  • 1128

POJ2481:Cows(树状数组)

Description Farmer John's cows have discovered that the clover growing along the ridge of the h...
  • libin56842
  • libin56842
  • 2015年06月23日 20:22
  • 1282

POJ2481树状数组

题目:题目链接   题目:就是按照题目的判断条件,判断对于每一cow,有多少个cow比它stronger。   分析:100000头cow,如果直接for必须超,又是要用到树状数组来节省时间。按照每一...
  • u010057864
  • u010057864
  • 2013年09月18日 15:45
  • 457

poj2481 树状数组

http://poj.org/problem?id=2481 Description Farmer John's cows have discovered that the clover ...
  • u013573047
  • u013573047
  • 2014年03月21日 17:10
  • 577

poj2481 树状数组

树状数组模板题,如果有牛的区域能全覆盖目前牛的区域,那么该牛比目前牛强壮 首先按e从大到小排,如果一样按s从小到大排 a数组记录的是ans,及到x为止的前缀和 注意两个区域相等时结果也相等而不算全覆盖...
  • brightest_star
  • brightest_star
  • 2015年10月08日 15:39
  • 181

poj2481 Cows(树状数组)

http://poj.org/problem?id=2481 题意:农民发现山上长了一排三叶草,他有n个牛。每个牛都有自己喜爱的吃草范围[st,ed],如果说牛i的st比j的小,ed比j的大,就...
  • Flynn_curry
  • Flynn_curry
  • 2017年03月03日 18:28
  • 174

Cows poj2481 树状数组应用

在纸上写写画画可以理解 #define _CRT_SECURE_NO_WARNINGS //这就类似于会场安排,求区间的真子集 #include #include #include #def...
  • baisedeqingting
  • baisedeqingting
  • 2017年07月08日 10:27
  • 79
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj2481树状数组
举报原因:
原因补充:

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