zoukankan      html  css  js  c++  java
  • poj2481

    给定n个集合 输出每个集合是多少集合的子集

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<stack>
    #define lowbit(x) x&(-x)
    using namespace std;
    struct p
    {
        int x,y,rank;
    }sts[151000];
    int c[151000],MAXN;
    bool cmp(p b,p a)
    {
        if(b.y==a.y)return b.x<a.x;
        return b.y>a.y;
    }
    inline int sum(int x)
    {
        int res=0;
        for(int i=x;i>=1;i-=lowbit(i))res+=c[i];
        return res;
    }
    inline void add(int x)
    {
        for(int i=x;i<=MAXN;i+=lowbit(i))c[i]++;
    }
    int ans[151000];
    int main()
    {
        int n;
        while(~scanf("%d",&n) && n)
        {
            memset(c,0,sizeof(c));
            memset(ans,0,sizeof(ans));
            MAXN=-1;
            for(int i=1;i<=n;i++)
            {
                scanf("%d%d",&sts[i].x,&sts[i].y);
                sts[i].x++,sts[i].y++;
                MAXN=max(MAXN,max(sts[i].x,sts[i].y));
                sts[i].rank=i;
            }
            sort(sts+1,sts+n+1,cmp);
            int cnt=0;
            for(int i=1;i<=n;i++)
            {
                if(sts[i].x==sts[i-1].x && sts[i].y==sts[i-1].y)cnt++;
                else cnt=0;
                ans[sts[i].rank]=sum(sts[i].x)-cnt;
                add(sts[i].x);
            } 
            for(int i=1;i<=n;i++)printf("%d ",ans[i]);
            printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Java数组
    Java非访问修饰符
    Java 循环结构
    Java修饰符
    Java语句
    DDK
    HDC中的前景色与背景色
    如何控制一个程序只能有一个进程
    把一个bmp转换成cur显示出来(掩码mask)
    怎么设置IE代理服务器
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7762269.html
Copyright © 2011-2022 走看看