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

    https://loj.ac/problem/10114

    题目描述

      给出(n)个点的坐标,按y坐标增序给出,定义一颗星的等级为平面上横纵坐标均小于等于它的点的个数,求每个等级的星的个数。

    思路

      由于(y)坐标是按增序给出,所以我们只需要考虑(x)坐标即可,由于x坐标范围比较小,我们直接维护横坐标小于等于(i)的点的个数即可,有树状数组维护前缀和即可。不过注意树状数组不能维护下标为(0)的情况,因为(lowbit(0)=0),所以要对(x+1)

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=32010;
    
    int read()
    {
    	int res=0,w=1;
    	char ch=getchar();
    	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
    	while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
    	return res*w;
    }
    void write(int x)
    {
    	if(x<0){putchar('-');x=-x;}
    	if(x>9)write(x/10);
    	putchar(x%10^48);
    }
    void writeln(int x)
    {
    	write(x);
    	putchar('
    ');
    }
    
    int c[N+5],ans[N+5];
    void update(int x,int v){for(;x<=N;x+=x&-x)c[x]+=v;}
    int query(int x)
    {
    	int res=0;
    	for(;x;x-=x&-x)res+=c[x];
    	return res;
    }
    
    int main()
    {
    	int n=read();
    	for(int i=1;i<=n;i++)
    	{
    		int x=read()+1,y=read();
    		int v=query(x);
    		update(x,1);
    		ans[v]++;
    	}
    	for(int i=0;i<n;i++)
    		printf("%d
    ",ans[i]);
    }
    
  • 相关阅读:
    Logstash
    收藏学习Linux好用的网站
    Elasticsearch
    Elasticsearch-head
    Kibana
    Metricbeat
    filebeat
    elelelleeleELK
    MySQL对库的操作
    【Django】URL控制器
  • 原文地址:https://www.cnblogs.com/fangbozhen/p/11754608.html
Copyright © 2011-2022 走看看