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

    题意:

    给了很多星星的坐标,星星的特征值是不比他自己本身高而且不在它右边的星星数。

    给定的输入数据是按照y升序排序的,y相同的情况下按照x排列,x和y都是介于0和32000之间的整数。每个坐标最多有一个星星。

    思路:

    这题给的输入数据很祥和,间接提示思路了。

    用x作为树状数组的区间,然后按照输入的顺序不断查找在包括自己的位置以及左边的星星数。

    细节是x可能是0,这是树状数组不能接受的,需要对输入的x数据进行加一操作。

    从这题可以看出树状数组最直白的作用就是求从1开始到某个点的某个区间的数量。

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int tree[33000];
    int ans[16000],n;
    int findans(int tar)
    {
        int sum=0;
        while(tar>0)
        {
            sum+=tree[tar];
            tar-=tar&(-tar);
        }
        return sum;
    }
    void updat(int tar)
    {
        while(tar<=32001)
        {
            tree[tar]++;
            tar+=tar&(-tar);
        }
    }
    int main()
    {
        memset(ans,0,sizeof(ans));
        memset(tree,0,sizeof(tree));
        int a,b;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&a,&b);
            a++;
            //printf("%d
    ",findans(a));
            ans[findans(a)]++;
            updat(a);
        }
        for(int i=0;i<n;i++)
        {
            printf("%d
    ",ans[i]);
        }
        return 0;
    }
  • 相关阅读:
    IOS 模块并且发布到NPM
    处理npm publish报错问题
    IOS 应用发布流程
    《温故而知新》JAVA基础八
    Beta冲刺 (5/7)
    Beta冲刺 (4/7)
    Beta冲刺 (3/7)
    Beta冲刺 (2/7)
    软件测试(团队)
    福大软工 · BETA 版冲刺前准备(团队)
  • 原文地址:https://www.cnblogs.com/tun117/p/4965136.html
Copyright © 2011-2022 走看看