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

    题目

    题意:按y递增的顺序给出n颗星星的坐标(y相等则x递增),每个星星的等级等于在它左边且在它下边(包括水平和垂直方向)的星星的数量,求出等级为0到n-1的星星分别有多少个。

    因为y递增的顺序给出,于是乎这道题跟 y 无关,在每次输入x的时候都去判断比x小,即在x之前的数有多少(ans)个,即星星的等级。然后更新num[ans]++  ( 存ans等级星星的个数num[ans]++ ).

    刚开始觉得x不是值吗,怎么一会又变成下标了。其实x一直都是下标,既是题中坐标系的下标,也是树状数组中的下标。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    const int N = 32010;
    int num[N];
    int c[N];
    
    void add(int x,int val)
    {
        while(x<=N)
        {
            c[x]+=val;
            x+=x&(-x);
        }
    }
    int sum(int x)
    {
        int res = 0;
        while(x>0)
        {
            res += c[x];
            x -= x&(-x);
        }
        return res;
    }
    int main()
    {
        int n,x,y;
        while(~ scanf("%d",&n))
        {
            for(int i=1; i<=n; i++)
            {
                scanf("%d%d",&x,&y);
                x++;//数状数组下标是从1开始的
                int ans =sum(x);
                num[ans]++;
                add(x,1);
            }
            for(int i=0; i<n; i++)
                printf("%d
    ",num[i]);
            memset(num,0,sizeof(num));
            memset(c,0,sizeof(c));
        }
    
    
        return 0;
    }
    
  • 相关阅读:
    假期学习2
    假期学习1
    读《需求工程--软件建模和分析》一
    数据清洗
    Mapreduce实例——WordCount
    SEVEN python环境jieba分词的安装 以即热词索引
    SIX Spark Streaming 编程初级实践
    FIVE Spark SQL 编程初级实践
    FOUR spark-shell 交互式编程
    THREE SPAKR
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160178.html
Copyright © 2011-2022 走看看