Color the ball 线段树 区间更新但点查询

Posted joeylee97

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Color the ball 线段树 区间更新但点查询相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<queue>
#include<deque>
#include<iomanip>
#include<vector>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<fstream>
#include<memory>
#include<list>
#include<string>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MAXN 100001
#define L 31
#define INF 1000000009
#define eps 0.00000001
struct node
{
    LL l, r, data;
}T[MAXN*4+10];
LL n,a[MAXN];
LL Query(LL p, LL k)
{
    if (T[p].l == T[p].r)
        return T[p].data;
    LL mid = (T[p].l + T[p].r) >> 1;
    LL sum = T[p].data;
    if (k <= mid)
        sum += Query(p << 1, k);
    else
        sum += Query(p << 1 | 1, k);
    return sum;
}
void Build(LL p, LL l, LL r)
{
    T[p].l = l, T[p].r = r, T[p].data = 0;
    if (l == r)
    {
        T[p].data = a[l];
        return;
    }
    LL mid = (l + r) >> 1;
    Build(p << 1, l, mid);
    Build(p <<1 | 1, mid + 1, r);
}
void Insert(LL p, LL l, LL r, LL num)
{
    //cout << p << ‘ ‘ << l << ‘ ‘ << r << ‘ ‘ << num << endl;
    if (l <= T[p].l&&r >= T[p].r)
    {
        T[p].data += num;
        return;
    }
    LL mid = (T[p].l + T[p].r) / 2;
    if (r <= mid)
        Insert(p << 1, l, r, num);
    else if (l > mid)
        Insert(p << 1 | 1, l, r, num);
    else
    {
        Insert(p << 1, l, mid, num);
        Insert(p << 1 | 1, mid + 1, r, num);
    }
}
int main()
{
    while (scanf("%lld", &n), n)
    {
        LL t1, t2;
        memset(a, 0, sizeof(a));
        Build(1, 1, n);
        for (LL i = 1; i <= n; i++)
        {
            scanf("%lld%lld", &t1, &t2);
            Insert(1, t1, t2, 1);
        }
        for (LL i = 1; i <= n; i++)
        {
            if (i>1) printf(" ");
            printf("%lld", Query(1, i));
        }
        printf("\n");
    }
    return 0;
}

 

技术分享
F.A.Q
Hand In Hand
Online Acmers
Forum | Discuss
Statistical Charts
Problem Archive
Realtime Judge Status
Authors Ranklist
 
     C/C++/Java Exams     
ACM Steps
Go to Job
Contest LiveCast
[email protected]
Best Coder beta
VIP | STD Contests
Virtual Contests 
    DIY | Web-DIY beta
Recent Contests
 

Color the ball

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


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
 

Author
8600

 























以上是关于Color the ball 线段树 区间更新但点查询的主要内容,如果未能解决你的问题,请参考以下文章

Color the ball (线段树的区间更新问题)

HDU 1556 Color the Ball 线段树 题解

HDU - 1556 Color the ball(线段树和树状数组)

hdu 1556 Color the ball(线段树区间维护+单点求值)

HDU1199 Color the Ball (线段树合并+离散化经典)

B - Color the ball (HDU - 1556)