zoukankan      html  css  js  c++  java
  • poj_2481,Cows,树状数组

    将e按从大到小排序,统计前i-1个中比
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct Item
    {
        int s;
        int e;
        int x;
    };
    int n;
    Item item[500010];
    int a[500010],b[500010];
    int lowbit(int x)
    {
        return x&(-x);
    }
    int sum(int x)
    {
        int ret=0;
        while(x>0)
        {
            ret=ret+a[x];
            x-=lowbit(x);
        }
        return ret;
    }
    void add(int x,int d)
    {
        while(x<500001)
        {
            a[x]+=d;
            x+=lowbit(x);
        }
    }
    bool cmp(Item a,Item b)
    {
        return a.e>b.e||((a.e==b.e)&&(a.s<b.s));
    }
    int main()
    {
        while(scanf("%d",&n)&&n)
        {
            memset(a,0,sizeof(a));
            for(int i=0;i<n;i++)
                {
                    scanf("%d%d",&item[i].s,&item[i].e);
                    item[i].s++,item[i].e++;
                    item[i].x=i;
                }
            sort(item,item+n,cmp);
            b[item[0].x]=sum(item[0].s);
                add(item[0].s,1);
            for(int i=1;i<n;i++)
            {
                if(item[i].e==item[i-1].e&&item[i].s==item[i-1].s)
                {
                    b[item[i].x]=b[item[i-1].x];
                    add(item[i].s,1);
                }
                else{
                    b[item[i].x]=sum(item[i].s);
                    add(item[i].s,1);
                }
            }
            for(int i=0;i<n;i++)
                cout<<b[i]<<" ";
            cout<<endl;
        }
        return 0;
    }
    

    e小的个数,注意相等的情况
  • 相关阅读:
    Servlet基础知识
    字节流
    MyEclipse快捷键
    Css Flex布局
    Django Session
    Django 分页
    Django Cookie
    Django 模板
    Python redis-py
    JQuery ajax
  • 原文地址:https://www.cnblogs.com/vactor/p/4099987.html
Copyright © 2011-2022 走看看