码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1541

时间:2018-05-02 16:01:02      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:坐标   不用   gets   std   print   code   owb   using   void   

因为y的输入是从小到大,所以不用考虑y坐标的问题

只考虑x坐标就行

还有个小细节就是0<=x,y,<=32000  x和y取0的时候树状数组处理不到 

x++就行了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int maxn = 32005;
int a[maxn];
int c[maxn];
int getsum(int i);
void add(int i,int k);
int main()
{
    int n,j,i,k,x,y;
    while(scanf("%d",&n) != EOF)
    {
        memset(c, 0, sizeof(c));
        memset(a, 0, sizeof(a));
        for(i=0;i<n;++i)
        {
            scanf("%d%d",&x,&y);
            x ++;
            a[getsum(x)]++;
            add(x,1);
        }
        for(i=0;i<n;++i)
            printf("%d\n",a[i]);
    }
}
int lowbit(int k)
{
    return k&(-k);
}
int getsum(int i)
{
    int sum = 0;
    while(i > 0)
    {
        sum += c[i];
        i-=lowbit(i);
    }
    return sum;
}
void add(int i,int k)
{
    while(i <= 32000)
    {
        c[i]+=k;
        i+=lowbit(i);
    }
}

 

hdu 1541

标签:坐标   不用   gets   std   print   code   owb   using   void   

原文地址:https://www.cnblogs.com/mltang/p/8979661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!