zoukankan      html  css  js  c++  java
  • POJ 2352 Stars

    题意:有一堆星星,每个星星的级别为坐标不高于它且不在它右边的星星个数,求级别为0~n - 1的星星个数。

    解法:树状数组。输入的星星坐标已经按y坐标升序排序,y坐标相等的按x升序排序,所以每输入一个数只要看之前输入的星星里有几个x坐标小于等于它的x坐标即为它的等级,等级计数器加一,把这个星星的x坐标加入树状数组,最后扫一遍等级计数器输出。并没注意到x坐标有0这种坑爹的事情……果断T了……

    代码:

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<string.h>
    #include<math.h>
    #include<limits.h>
    #include<time.h>
    #include<stdlib.h>
    #include<map>
    #include<queue>
    #include<set>
    #include<stack>
    #include<vector>
    #define LL long long
    using namespace std;
    int BA[32005];
    int n;
    inline int lowbit(int x)
    {
        return x & (-x);
    }
    void update(int pos)
    {
        for(int i = pos; i <= 32005; i += lowbit(i))
            BA[i]++;
    }
    int query(int pos)
    {
        int res = 0;
        for(int i = pos; i > 0; i -= lowbit(i))
            res += BA[i];
        return res;
    }
    int main()
    {
        while(~scanf("%d", &n))
        {
            memset(BA, 0, sizeof BA);
            int ans[15005] = {0};
            for(int i = 0; i < n; i++)
            {
                int x, y;
                scanf("%d%d", &x, &y);
                x++;
                ans[query(x)]++;
                //cout << "q = " << query(x) << endl;
                update(x);
            }
            for(int i = 0; i < n; i++)
                printf("%d
    ", ans[i]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    各种机器学习方法概念
    深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
    肤色识别
    创建自己的窗口消息
    模糊C均值
    Fisher线性判别
    用遗传算法加强足球游戏的人工智能
    人工智能-遗传算法解决推箱子问题现实
    LBP特征
    VC 制作系统托盘程序实现将窗口最小化到系统托
  • 原文地址:https://www.cnblogs.com/Apro/p/4504234.html
Copyright © 2011-2022 走看看