zoukankan      html  css  js  c++  java
  • MUTC 3 A Flowers 树状数组

    Flowers

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


    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
     

    Recommend
    zhoujiaqi2010
     

    --------------------

    离散

    --------------------

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    const int maxn=211111;
    
    int n,m;
    int s[maxn],t[maxn];
    int b[maxn];
    int tree[maxn];
    int q[maxn];
    int ans[maxn];
    int mn,nn;
    
    int lowbit(int x)
    {
        return x&(-x);
    }
    
    void add(int x,int val)
    {
        for (int i=x;i<=mn;i+=lowbit(i))
        {
            tree[i]+=val;
        }
    }
    
    int query(int x)
    {
        int ret=0;
        for (int i=x;i>0;i-=lowbit(i))
        {
            ret+=tree[i];
        }
        return ret;
    }
    
    int main()
    {
        int T,cnt=0;
        scanf("%d",&T);
        while (T--)
        {
            memset(tree,0,sizeof(tree));
            scanf("%d%d",&n,&m);
            nn=1;
            for (int i=1;i<=n;i++)
            {
                scanf("%d%d",&s[i],&t[i]);
                b[nn++]=s[i];
                b[nn++]=t[i];
            }
            for (int i=1;i<=m;i++)
            {
                scanf("%d",&q[i]);
                b[nn++]=q[i];
            }
            sort(b+1,b+nn);
            mn=1;
            for (int i=2;i<nn;i++)
            {
                if (b[i]!=b[i-1]) b[++mn]=b[i];
            }
            //for (int i=1;i<=mn;i++) cerr<<b[i]<<" ";cerr<<endl;
            for (int i=1;i<=n;i++)
            {
                int l=lower_bound(b+1,b+mn+1,s[i])-b;
                int r=lower_bound(b+1,b+mn+1,t[i])-b;
                //cerr<<"l="<<l<<" r="<<r<<endl;
                add(l,1);
                add(r+1,-1);
            }
            printf("Case #%d:\n",++cnt);
            for (int i=1;i<=m;i++)
            {
                int l=lower_bound(b+1,b+mn+1,q[i])-b;
                printf("%d\n",query(l));
            }
        }
        return 0;
    }
    




  • 相关阅读:
    Django----博客文章数据返回
    Django----admin模块初识
    Django搭建博客文章---模型层
    Js 提交 form 表单
    sql 查询 between and 和 >= <= 比较
    C# 未能加载项目文件
    不一样的 Null
    Js实现table单双行交替色
    C# 判断一个string型的时间格式是否正确
    利用 Label 小小的提升一下用户体验
  • 原文地址:https://www.cnblogs.com/cyendra/p/3226295.html
Copyright © 2011-2022 走看看