zoukankan      html  css  js  c++  java
  • POJ-2352 Stars(树状数组)

    题目大意:给n个点的坐标,求出每一个点的左下方(允许同一行或同一列)的点的个数。

    题目分析:题目中的坐标是先按y从小到大,再按x从小到大给出的。对于坐标 (xi,yi),只需考虑横坐标在0~xi之间的坐标已经出现了几个。用树状数组维护即可。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    
    const int N=10000;
    
    int cnt[N*3+2005];
    int ans[N+5005];
    
    int lowbit(int x)
    {
    	return x&(-x);
    }
    
    void add(int x)
    {
    	if(x==0) ++cnt[x];
    	else{
    		while(x<=32000){
    			++cnt[x];
    			x+=lowbit(x);
    		}
    	}
    }
    
    int query(int x)
    {
    	int res=0;
    	while(x>0){
    		res+=cnt[x];
    		x-=lowbit(x);
    	}
    	res+=cnt[0];
    	return res;
    }
    
    int main()
    {
    	int n;
    	while(~scanf("%d",&n))
    	{
    		memset(cnt,0,sizeof(cnt));
    		memset(ans,0,sizeof(ans));
    		int x,y;
    		for(int i=0;i<n;++i){
    			scanf("%d%d",&x,&y);
    			++ans[query(x)];
    			add(x);
    		}
    		for(int i=0;i<n;++i)
    			printf("%d
    ",ans[i]);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    四轴PID思路整理
    STM32输入捕获TIM2四通道
    四轴和遥控器的对应
    四层板学习(二)
    四层板学习(一)布线前的准备
    冲突的处理方法
    散列表
    重设置电脑时间
    深圳销量统计源码分析
    源码分析
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/5461010.html
Copyright © 2011-2022 走看看