zoukankan      html  css  js  c++  java
  • (线段树 区间运算求点)Flowers -- hdu -- 4325

    http://acm.hdu.edu.cn/showproblem.php?pid=4325

    Flowers

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 2577    Accepted Submission(s): 1263


    Problem Description
    As is known to all, the blooming time and duration varies between different kinds of flowers. Now there is a garden planted full of flowers. The gardener wants to know how many flowers will bloom in the garden in a specific time. But there are too many flowers in the garden, so he wants you to help him.
     
    Input
    The first line contains a single integer t (1 <= t <= 10), the number of test cases.
    For each case, the first line contains two integer N and M, where N (1 <= N <= 10^5) is the number of flowers, and M (1 <= M <= 10^5) is the query times. 
    In the next N lines, each line contains two integer Si and Ti (1 <= Si <= Ti <= 10^9), means i-th flower will be blooming at time [Si, Ti].
    In the next M lines, each line contains an integer Ti, means the time of i-th query.
     
    Output
    For each case, output the case number as shown and then print M lines. Each line contains an integer, meaning the number of blooming flowers.
    Sample outputs are available for more details.
     
    Sample Input
    2  
    1 1
    5  10
    4
    2 3
    1 4
    4 8
    1
    4
    6
     
    Sample Output
    Case #1:
    0
    Case #2:
    1
    2
    1
     
    Author
    BJTU
     
    Source
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<queue>
    using namespace std;
    
    #define N 110000
    #define MOD 100000007
    #define Lson r<<1
    #define Rson r<<1|1
    
    struct node
    {
        int L, R, e;
        int Mid()
        {
            return (L+R)/2;
        }
    }a[N<<2];
    
    void BuildTree(int r, int L, int R)
    {
        a[r].L=L, a[r].R=R, a[r].e=0;
    
        if(L==R)
            return ;
    
        BuildTree(Lson, L, a[r].Mid());
        BuildTree(Rson, a[r].Mid()+1, R);
    }
    
    void Update(int r, int L, int R)
    {
        if(a[r].L==L && a[r].R==R)
        {
            a[r].e++;
            return ;
        }
    
        if(R<=a[r].Mid())
            return Update(Lson, L, R);
        else if(L>a[r].Mid())
            return Update(Rson, L, R);
        else
        {
            Update(Lson, L, a[r].Mid());
            Update(Rson, a[r].Mid()+1, R);
        }
    }
    
    void UP(int r, int L, int R)
    {
        if(L==R)
            return ;
    
        if(a[r].L==L && a[r].R==R )
        {
            a[Lson].e += a[r].e;
            a[Rson].e += a[r].e;
        }
    
        if(R<=a[r].Mid())
             UP(Lson, L, R);
        else if(L>a[r].Mid())
             UP(Rson, L, R);
        else
        {
             UP(Lson, L, a[r].Mid());
             UP(Rson, a[r].Mid()+1, R);
        }
    }
    
    int Query(int r, int x)
    {
        if(a[r].L==a[r].R && a[r].L==x)
           return a[r].e;
    
        if(x<=a[r].Mid())
            return Query(Lson, x);
        else
            return Query(Rson, x);
    }
    
    int main()
    {
        int T, iCase=1;
        scanf("%d", &T);
        while(T--)
        {
            int n, m, i, L, R, x;
    
            scanf("%d%d", &n, &m);
    
            BuildTree(1, 1, 100005);
    
            for(i=0; i<n; i++)
            {
                scanf("%d%d", &L, &R);
                Update(1, L, R);
            }
    
            UP(1, 1, 100005);
    
            printf("Case #%d:
    ", iCase++);
            for(i=0; i<m; i++)
            {
                scanf("%d", &x);
                printf("%d
    ", Query(1, x));
            }
        }
        return 0;
    }
    勿忘初心
  • 相关阅读:
    Java注释Override、Deprecated、SuppressWarnings详解
    android: 实现跨程序数据共享
    android: 创建自己的内容提供器
    android: 通过内容提供器读取系统联系人
    android: 内容提供器简介
    android: UriMatcher的用法
    java中static{}语句块详解
    android: SQLite 数据库的最佳实践
    android: SQLite使用 SQL 操作数据库
    android: SQLite查询数据
  • 原文地址:https://www.cnblogs.com/YY56/p/4965021.html
Copyright © 2011-2022 走看看