zoukankan      html  css  js  c++  java
  • 数星星(单点更新,求前缀和)

    http://acm.hdu.edu.cn/showproblem.php?pid=1541

    题意:二维平面坐标上,给出n个星星的坐标,规定每个星星的左下方向的星星数量为该星星的等级。

    统计1-n-1等级的数量。

    解法:因为给出顺序的特殊性,可以用树状数组统计各星星的等级。

    注意两点:1、该题为多组输入(该题没讲。。没有就T)

    2、坐标范围从0开始,而树状数组一般从一开始,所以将坐标都加一。

    //#include <bits/stdc++.h>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <stdio.h>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <string.h>
    #include <vector>
    #define ME(x , y) memset(x , y , sizeof(x))
    #define SF(n) scanf("%d" , &n)
    #define rep(i , n) for(int i = 0 ; i < n ; i ++)
    #define INF  0x3f3f3f3f
    #define mod 1000000007
    #define PI acos(-1)
    using namespace std;
    typedef long long ll ;
    int x[15009] , y[15009];
    int xm  ;
    int ans[15009];
    int c[32009];
    int lowerbit(int x)
    {
        return x&(-x) ;
    }
    
    void add(int x , int val)
    {
        for(int i = x ; i <= xm ; i += lowerbit(i))
        {
            c[i] += val ;
        }
    }
    
    int getsum(int x)
    {
        int ans = 0 ;
        for(int i = x ; i >= 1 ; i -= lowerbit(i))
        {
            ans += c[i];
        }
        return ans ;
    }
    
    int main()
    {
        int n ;
        while(~scanf("%d" , &n))
        {
            memset(c , 0 , sizeof(c));
            memset(ans , 0 , sizeof(ans));
            for(int i = 0 ; i < n ; i++)
            {
                scanf("%d%d" , &x[i] , &y[i]);
                x[i]++;
                xm = max(x[i] , xm) ;
            }
            int sum = 0 ;
            for(int i = 0 ; i < n ; i++)
            {
                sum = getsum(x[i]);
                add(x[i] , 1);
                ans[sum]++ ;
            }
            for(int i = 0 ; i < n ; i++)
            {
                cout << ans[i] << endl ;
            }
        }
    
        return 0 ;
    }
    
  • 相关阅读:
    一个简单的空间配置器
    【转】c++中placement new操作符
    类的operator new与operator delete的重载【转】
    STL中常用的c++语法
    java编程思想-多态
    java编程思想-复用类(2)
    java编程思想-复用类
    import与require的区别
    gulp插件
    gulp-gulpfile.js语法说明
  • 原文地址:https://www.cnblogs.com/nonames/p/12238622.html
Copyright © 2011-2022 走看看