码迷,mamicode.com
首页 > 编程语言 > 详细

lines---hdu5124(离散化+数组模拟)

时间:2015-11-07 21:45:06      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5124

就是有n条在x轴的线段,给你线段的左右端点,每条线段都会覆盖点,求出最多被覆盖多少次

技术分享
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define N 201000

int b[N], v[N];

struct node
{
    int L, R;
}a[N];

int main()
{
    int T, n;
    scanf("%d", &T);
    while(T--)
    {
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
        memset(v, 0, sizeof(v));
        int k=0, Max=0, ans=0;
        scanf("%d", &n);
        for(int i=0; i<n; i++)
        {
            scanf("%d %d", &a[i].L, &a[i].R);
            b[k++]=a[i].L;
            b[k++]=a[i].R;
        }///离散化处理;

        sort(b, b+k);
        k = unique(b, b+k)-b;///排序去重;

        for(int i=0; i<n; i++)
        {
            int L=lower_bound(b, b+k, a[i].L)-b;
            int R=lower_bound(b, b+k, a[i].R)-b;
            v[L]++;///相当于是入点++出点--;最后把v从前到后加在一起就相当于此点被加过几次;
            v[R+1]--;
        }

        for(int i=0; i<k; i++)
        {
            ans+=v[i];
            Max=max(Max, ans);///求最大的值;
        }
        printf("%d\n", Max);
    }
    return 0;
}
View Code

 

lines---hdu5124(离散化+数组模拟)

标签:

原文地址:http://www.cnblogs.com/zhengguiping--9876/p/4946107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!