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;
    }
    
  • 相关阅读:
    js上移、下移排序 效果
    如何为平板打造完美的网站页面?
    [BUUOJ]刮开有奖reverse
    [0CTF 2016]piapiapia
    [TSCTFJ 2019]bypass
    [安洵杯 2019]easy_serialize_php
    [TSCTFJ] relax
    c#访问网页
    DNN 数据访问
    c#访问数据库
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160178.html
Copyright © 2011-2022 走看看