zoukankan      html  css  js  c++  java
  • 数星星

    天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标。如果一个星星的左下方(包含正左和正下)有 k 颗星星,就说这颗星星是 k 级的。

    stars1.png

    例如,上图中星星 5 是 3 级的(1,2,4 在它左下),星星 2,4 是 1 级的。例图中有 1 个 0 级,2 个 1 级,1 个 2 级,1 个 3 级的星星。

    给定星星的位置,输出各级星星的数目。

    一句话题意   给定 n 个点,定义每个点的等级是在该点左下方(含正左、正下)的点的数目,试统计每个等级有多少个点。

    输入格式

    第一行一个整数 N,表示星星的数目;
    接下来 N行给出每颗星星的坐标,坐标用两个整数 x,y 表示;
    不会有星星重叠。星星按 y 坐标增序给出,y 坐标相同的按 x 坐标增序给出。

    输出格式

    N 行,每行一个整数,分别是 0 级,1 级,2 级,……,N1 级的星星的数目。

    样例

    样例输入

    5
    1 1
    5 1
    7 1
    3 3
    5 5

    样例输出

    1
    2
    1
    1
    0

    数据范围与提示

    对于全部数据,1N1.5×10^4,0x,y3.2×10^4。

    ________________________________________________________________________________________________

    树状数组,比较简单。

    注意,星星的坐标要从0开始。

    ________________________________________________________________________________________________

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=15010;
     4 const int maxm=32010;
     5 int sz[maxm],n;
     6 int ans[maxn];
     7 inline int lowbit(int x)
     8 {
     9     return x&-x;
    10 }
    11 void update(int x)
    12 {
    13     for(int i=x;i<maxm;i+=lowbit(i))++sz[i];
    14 }
    15 int get(int x)
    16 {
    17     int ans=0;
    18     for(int i=x;i;i-=lowbit(i))ans+=sz[i];
    19     return ans;
    20 }
    21 int main()
    22 {
    23     scanf("%d",&n);
    24     for(int x,y,i=0;i<n;++i)
    25     {
    26         scanf("%d%d",&x,&y);
    27         ++x,++y;
    28         ans[get(x)]++;
    29         update(x);
    30     }
    31     for(int i=0;i<n;++i)printf("%d
    ",ans[i]);
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    Java学习第一篇废话写在前面
    使用UI Automation实现自动化测试7.2 (模拟键盘复杂操作在自动化测试中的应用)
    生活随想之 积累经验篇
    赌一把
    重启职业及生存旅途计划
    partial class在自动化测试中的使用
    您们用什么广告平台
    Crazy English 900 Expressions (Android App)
    生存之道
    个税计算器完美终极版
  • 原文地址:https://www.cnblogs.com/gryzy/p/10293999.html
Copyright © 2011-2022 走看看