• 树状数组——POJ-2352


    题目含义

    给出一堆星星的横纵坐标

    指定一个星星的大小是横坐标小于等于它且纵坐标小于它的星星个数

    要求你求出各个大小的星星的个数

    题目分析

    这道题可以用树状数组做,但需要一点巧妙的转化

    如果把星星按纵坐标从小到大进行处理,这个星星的大小就是横坐标小于等于它的星星的个数

    这样就只用考虑横坐标,并通过树状数组计算星星大小

    注意:由于计算大小有while(x)这一步骤,同时星星的横坐标可能为0,所以最好x++,不然会TLE

    题目代码

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    const int maxn=32007;
    const int maxm=15007;
    int n,x,y;
    int c[maxn],num[maxm];
    int lowbit(int x){
        return x&(-x);
    }
    int get(int x){
        int ans=0;
        while(x){
            ans+=c[x];
            x-=lowbit(x);
        }
        return ans;
    }
    void insert(int x){
        while(x<=maxn){
            c[x]++;
            x+=lowbit(x);
        }
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&x,&y),x++;
            num[get(x)]++;
            insert(x);
        }
        for(int i=0;i<n;i++)
            printf("%d
    ",num[i]);
        return 0;
    }
  • 相关阅读:
    Preparing for Merge Sort(二分)
    Polycarp's phone book(unordered_mpa 大法好)
    Yet Another Task with Queens
    nginx 初时
    JSON.stringfiy 序列化
    css grid布局使用
    遍历对象属性5种方法,排列顺序规则
    归并方法
    处理地图经纬度,保留6位小数
    js 操作方法
  • 原文地址:https://www.cnblogs.com/helman/p/11232783.html
Copyright © 2020-2023  润新知