zoukankan      html  css  js  c++  java
  • hdoj_1556Color the ball

    Color the ball

    Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 5330    Accepted Submission(s): 2841


    Problem Description
    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
     

    Input
    每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。
    当N = 0,输入结束。
     

    Output
    每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。
     

    Sample Input
    3 1 1 2 2 3 3 3 1 1 1 2 1 3 0
     

    Sample Output
    1 1 1 3 2 1
    改段求点。


    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    #pragma warning(disable : 4996)
    
    const int MAXN = 100005;
    int tree[MAXN];
    int n;
    
    int LowBit(int t)
    {
    	return t&(-t);  
    }
    
    void Update(int pos, int num)
    {
    	while(pos <= n)
    	{
    		tree[pos] += num;
    		pos += LowBit(pos);
    	}
    }
    
    int GetSum(int end)
    {
    	int sum = 0;
    	while(end > 0)
    	{
    		sum += tree[end];
    		end -= LowBit(end);
    	}
    	return sum;
    }
    
    int main()
    {
    	freopen("in.txt","r",stdin);
    	int x, y;
    	while(scanf("%d", &n) != EOF)
    	{
    		if(n == 0)
    		{
    			break;
    		}
    		memset(tree, 0, sizeof(tree));
    		for(int i = 1;i <= n; i++)
    		{
    			scanf("%d %d", &x, &y);
    			Update(x, 1);
    			Update(y + 1, -1);
    		}
    		for(int i = 1;i < n; i++)
    		{
    			printf("%d ", GetSum(i));
    		}
    		printf("%d\n", GetSum(n));
    	}
    	return 0;
    }


  • 相关阅读:
    搭建Android开发环境(linux x86_64)
    prisoner of love
    今天火箭和太阳打架了?
    归途,奋斗的起点
    年轻的希望
    老师:节日快乐!
    今天是我的生日吗?
    我亲爱的弟弟
    我的08,期盼09
    只是向往
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834986.html
Copyright © 2011-2022 走看看