zoukankan      html  css  js  c++  java
  • 树状数组——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;
    }
  • 相关阅读:
    黑盒测试实践——每日例会记录(一)
    《高级软件测试》—如何计算团队成员贡献分
    TestLink学习——第一周使用小结
    BugkuCTF 你必须让他停下
    BugkuCTF 域名解析
    BugkuCTF web3
    BugkuCTF 矛盾
    BugkuCTF web基础$_POST
    BugkuCTF web基础$_GET
    BugkuCTF 计算器
  • 原文地址:https://www.cnblogs.com/helman/p/11232783.html
Copyright © 2011-2022 走看看