• HDU 4343 贪心


    D - Interval query
    Time Limit: 1.5 Sec

    Memory Limit: 256 MB

    Description

    This is a very simple question. There are N intervals in number axis, and M queries just like “QUERY(a,b)” indicate asking the maximum number of the disjoint intervals between (a,b) .

    Input

    There are several test cases. For each test case, the first line contains two integers N, M (0<N, M<=100000) as described above. In each following N lines, there are two integers indicate two endpoints of the i-th interval. Then come M lines and each line contains two integers indicating the endpoints of the i-th query. 
    You can assume the left-endpoint is strictly less than the right-endpoint in each given interval and query and all these endpoints are between 0 and 1,000,000,000.

    Output

    For each query, you need to output the maximum number of the disjoint intervals in the asked interval in one line.

    Sample Input

    3 2
    1 2
    2 3
    1 3
    1 2
    1 3

    Sample Output

    1
    2

    HINT

    题意

                  给你一些区间,现在有m个查询,求出每个查询的区间内的最大的不相交区间个数

    题解

                 二分,比赛的时候这样写,我艹了一直超时,赛后看了qscqesze多加了一个判断,加上去结果过了,太弱了

    代码:

       

    ///1085422276
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <queue>
    #include <typeinfo>
    #include <map>
    typedef long long ll;
    using namespace std;
    #define inf 10000000
    inline ll read()
    {
        ll x=0,f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9')
        {
            if(ch=='-')f=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
            x=x*10+ch-'0';
            ch=getchar();
        }
        return x*f;
    }
    //***************************************************************
    
    struct ss
    {
        int x,y;
    }a[100005],b[100005];
    int lll;
    int rrr;
    bool cmp(ss a,ss b)
    {
        return a.y<b.y||(a.y==b.y&&a.x>b.x);
    }
    int n,l,r;
    int main()
    {
        int m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(int i=0; i<n; i++)
            {
                a[i].x=read();
                a[i].y=read();
            }
            int tot=0;
            sort(a,a+n,cmp);
            for(int i=0;i<n;i++)
            {
                int flag=0;
                for(int j=i+1;j<n;j++)
                {
                    if(a[j].y>a[i].y)break;
                    if(a[j].x<a[i].x)continue;
                    flag=1;
                    break;
                }
                if(!flag)b[tot++]=a[i];
            }
            n=tot;
            for(int i=1;i<=m;i++)
            {
                lll=read();
                rrr=read();
                int ans=0;
                 l=0;r=n-1;
                int aa=-1;
                while(l<=r)
                {
                    int mid=(l+r)>>1;
                    if(b[mid].y<=lll)
                    {
                        aa=mid;
                        l=mid+1;
                    }
                    else r=mid-1;
                }
               for(int i=aa+1;i<n;i++)
               {
                   if(b[i].y<=rrr)
                   {
                       if(b[i].x>=lll)ans++,lll=b[i].y;
                   }else break;
               }
               printf("%d
    ",ans);
            }
    
        }
        return 0;
    }
    View Code
  • 相关阅读:
    MR案例:内连接代码实现
    分布式缓存DistributedCache
    MR案例:Map-Join
    hadoop随手笔记
    Job流程:决定map个数的因素
    Job流程:提交MR-Job过程
    MR案例:Reduce-Join
    MR案例:倒排索引
    MR案例:路径过滤PathFilter
    MR案例:分区和排序
  • 原文地址:https://www.cnblogs.com/zxhl/p/4746129.html
Copyright © 2020-2023  润新知