zoukankan      html  css  js  c++  java
  • POJ2352【树状数组】

    个人NO。1

    一开始题意理解有错。

    一星星左下边有N颗星星,那它的等级就是N。

    一开始理解必须X,Y两个坐标都小于,后来根据样例看了一下只要左下方即可,X,Y坐标都小于等于即可,但不包括星星本身。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    int lowbit(int x)
    {
        return x&-x;
    }
    int c[32005];
    int x[32005];
    int n;
    int ans[32005];
    int visit[32005];
    int a[32005];
    void add(int x,int y)//后面的所有的值得更新,不包括自身
    {
        while(x<=32005)
        {
           c[x]+=y;
           x+=lowbit(x);
        }
    }
    int sum(int x)
    {
        int ret=0;
        while(x>0)
        {
            ret+=c[x];
            x-=lowbit(x);
        }
        return ret;
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            memset(c,0,sizeof(c));
            memset(x,0,sizeof(x));
            memset(ans,0,sizeof(ans));
            int x,y;
            for(int i=1;i<=n;i++)
            {
                scanf("%d%d",&a[i],&y);
                if(visit[a[i]+1]==0)
                {
                    add(a[i]+2,1);
                    visit[a[i]+1]=1;
                }
                else 
                add(a[i]+1,1);//c[i]表示比i坐标小的个数
                ans[sum(a[i]+1)]++;
            }
    
           for(int i=0;i<n;i++)
               printf("%d
    ",ans[i]);
        }
        return 0;
    }
    


    题目有陷阱就是坐标可以输入0,这对lowbit不适应。

    对树状数组的用法更了解了一下,大致用法如下:balabala....奋斗奋斗

  • 相关阅读:
    JavaScript测试工具chai
    gradle初始仓库依赖(含junit)
    汇编和中断
    oracle-12c-ee安装
    pickle
    Python (zip, lambda, map, shallow copy, deepcopy)
    豆瓣源下载tensorflow
    Linux上XRDP可作为WIN的远程连接
    VNC连接远程Linux——废弃电脑作为运算机器
    MACOS 运行Keras报错
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3239117.html
Copyright © 2011-2022 走看看