【扫描线】HDU 5124 lines

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

【题意】

在数轴x上,每次操作都覆盖一个区间的所有点,问被覆盖次数最多的点是覆盖了多少次

【思路】

最简单的扫描线,左右端点分别排序,遇到左端点sum++更新最值,遇到右端点sun--更新最值

【Accepted】

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[100010],b[100010];
 4 int t,n;
 5 bool cmp(int  aa,int bb)
 6 {
 7     return aa<bb;
 8 }
 9 int main()
10 {
11     scanf("%d",&t);
12     while(t--)
13     {
14         scanf("%d",&n);
15         for(int i=0; i<n; i++)
16             scanf("%d%d",&a[i],&b[i]);
17         sort(a,a+n,cmp);
18         sort(b,b+n,cmp);
19         int maxx=0,sum=0;
20         int j=0,i=0;
21         while(i!=n && j!=n)
22         {
23             if(b[j]<a[i])
24             {
25                 sum--;
26                 j++;
27             }
28             else
29             {
30                 sum++;
31                 i++;
32             }
33             maxx=max(maxx,sum);
34             //printf("%d\n",maxx);
35         }
36         printf("%d\n",maxx);
37     }
38     return 0;
39 }

O(n)扫描线

时间: 2024-10-26 13:46:04

【扫描线】HDU 5124 lines的相关文章

HDU 5124 lines(BestCoder Round #20)

Problem Description: John has several lines. The lines are covered on the X axis. Let A is a point which is covered by the most lines. John wants to know how many lines cover A. Input: The first line contains a single integer T(1≤T≤100)(the data for 

hdu 5124 lines (线段树+离散化)

lines Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 620    Accepted Submission(s): 288 Problem Description John has several lines. The lines are covered on the X axis. Let A is a point which

HDU 5124 lines

lines Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 515    Accepted Submission(s): 241 Problem Description John has several lines. The lines are covered on the X axis. Let A is a point which i

hdu 5124 lines(Bestcoder Round #20)

lines                                                                Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 309    Accepted Submission(s): 145 Problem Description John has several line

[思路题] hdu 5124 lines

题意: 给n个区间 [x,y],问被最多覆盖的点,被覆盖了多少次. 思路: 一个很巧妙的方法.好像原来有接触过. 就是如果给你[1,3]就used[1]++,used[4]--. 然后从左到又过一遍出现的点 依次累加每次加的时候取最大值. 然后这题需要用到map离散化. 代码: #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #inclu

BestCoder20 1002.lines (hdu 5124) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5124 题目意思:给出 n 条线段,每条线段用两个整数描述,对于第 i 条线段:xi,yi 表示该条线段的左端点和右端点.设 A 表示最多线段覆盖的点(当然这个 A 可以有多个啦,但这个无关紧要).现在需要求的是 A 被多少条线段覆盖. 我是不会做啦.......一开始还看不懂题目= = 以下是按照题解做的, 题解中的最大区间和,实际上就是求最大连续子序列的和. 1 #include <iostrea

5124 lines

· 题意: 给n条线段,求某点上最多覆盖多少条线段. ·hdu上有题解: 1002 lines 我们可以将一条线段[xi,yi]分为两个端点xi和(yi)+1,在xi时该点会新加入一条线段,同样的,在(yi)+1时该点会减少一条线段,因此对于2n个端点进行排序,令xi为价值1,yi为价值-1,问题转化成了最大区间和,因为1一定在-1之前,因此问题变成最大前缀和,我们寻找最大值就是答案,另外的,这题可以用离散化后线段树来做.复杂度为排序的复杂度即nlgn,另外如果用第一种做法数组应是2n,而不是n

hdu 5031 Lines 爆搜

其实嘞,这个线可以只延伸一端 然后嘞,爆搜一次就可以 最后嘞,600-800ms过 本弱就是弱啊,你来打我呀-- #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int a[100][100]; int n,m,ans; bool dfs(int step) { int i,j,t,ii,jj,x,y,cnt,tx,t

HDU 5124

题意:给定 n 个区间,问最多重复的子区间? 题解:(离散化思想)讲所有的数都排个序,将区间的左值定为 1 ,右值定为 -1 ,这样对所有的数搜一遍过去找最大的值即可 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <time.h> 6 #include <ctype.h> 7 #includ