zoukankan      html  css  js  c++  java
  • poj2352 Stars

    给你星星的坐标(y递增,若y相等,x递增),每个星星都有一个等级,规定它的等级就是在它左下方的星星的个数。输入所有星星后,依次输出等级为0到n-1的星星的个数。
    思路
    统计某个星星左下角有多少星星。
    本题给出的数据已经按照y从小到大排好了,所以我们只需要考虑x就行,题意也就成了统计某个星星前面有多少星星。使用树状数组需要注意:给的点的坐标是从0开始的,树状数组中x不能为0,所以我们需要在输入x坐标时加一。

    
    #include <string.h>
    #include <stdio.h>
    #include <math.h>
    #include <queue>
    #include <stack>
    #include <algorithm>
    #define ll long long
    using namespace std;
    const int maxn=32005;
    int ans[maxn],c[maxn];
    int lowbit(int x)
    {
    	return x&(-x);
    }
    void add(int i,int val)// Add操作,将第i个元素增加val,那么他的父节点也要增加+
    {
    	while(i<=maxn)
    	{
    		c[i]+=val;
    		i+=lowbit(i);//i的父节点
    	}
    }
    int sum(int i)
    {
    	int s=0;
    	while(i>0)
    	{
    		s+=c[i];
    		i-=lowbit(i);
    	}
    	return s;
    }
    int main()
    {
    	int i,j,n;
    	scanf("%d",&n);
    	int x,y;
    	for (i=1; i<=n; i++)
    	{
    		scanf("%d%d",&x,&y);
    		x++;
    		ans[sum(x)]++;//sum算出x的级别,然后ans计数 
    		add(x,1);
    	}
    	for (i=0; i<n; i++)//级别从0->n-1的行星数量 
    		printf("%d
    ",ans[i]);
    
    	return 0;
    }
    
    
  • 相关阅读:
    C#匿名类与dynamic关键字有意思的玩法
    C#中参数化查询速度慢的原因
    拉姆达表达式的一些常用知识
    git的学习
    yield return的使用。。。
    C# Cache缓存的应用
    C# 异步编程,async与await的简单学习
    SSH
    SSM搭建手册
    PLsql快捷键
  • 原文地址:https://www.cnblogs.com/shidianshixuan/p/14427247.html
Copyright © 2011-2022 走看看