【51nod1672】区间交】的更多相关文章

题目链接: 区间交 Problem Description   小A有一个含有n个非负整数的数列与mm个区间.每个区间可以表示为l​i​​,r​i​​. 它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大. 例如样例中,选择[2,5]与[4,5]两个区间就可以啦. Input   多组测试数据 第一行三个数n,k,m(1≤n≤100000,1≤k≤m≤100000). 接下来一行n个数a​i​​,表示lyk的数列(0≤a​i​​≤10​9​​). 接下来m行,每行两个数l​i​…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5700 [题目大意] 给出一个长度为n的数列和m个区间,现在求k个区间,使得他们的区间交内的数列项和最大. [题解] 将区间按照右端点为第一关键字排序, 那么在从后往前扫描的过程中,已经扫过的部分右端点一定大于当前 所以我们可以枚举区间交的右端点,找出第k小的左端点,来更新答案 因为右端点固定,因此左端点越小,答案一定越大, 所以枚举右端点不会遗漏答案. [代码] #include <cstdio…
区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 849    Accepted Submission(s): 377 Problem Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为li,ri. 它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大. 例如样例中,选择[2,5]…
区间交 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5700 Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为li,ri. 它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大. 例如样例中,选择[2,5]与[4,5]两个区间就可以啦. Input 多组测试数据 第一行三个数n,k,m(1≤n≤100000,1≤k≤m≤100000). 接下来一行n个数ai,表示lyk的数列(0≤ai≤10…
区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 567    Accepted Submission(s): 279 Problem Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为li,ri. 它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大. 例如样例中,选择[2,5]…
题:https://codeforces.com/contest/1284/problem/D 题意:给定n个1对的时间断,我是这么理解的,甲去参加a时间段的讲座,乙去参加b时间段的讲座,然后若这n对中若能挑出这样一个子集段:甲能参加第 i 个时间段的讲座而乙不能.就输出“NO”(注意,甲乙参加讲座的时间段是给定的a时间段,和b时间段,并不是同一个时间段) 分析:枚举a时间段的时间交,然后讲对应的b时间段的时间交加到线段数上,俩者的时间交数一定要相同,因为这些b区间中两两之间也必须在某点交. 可…
题目大意:给定一个长度为 N 的序列,以及 M 个区间,现从中选出 K 个区间,使得这些区间的交集区间的点权和最大,求最大值是多少. 题解: 发现直接选 K 个区间不可做,考虑从答案入手.设答案区间为 [l,r],进行枚举答案区间的左端点.当前枚举到的左端点设为 L,那么能够以 L 作为左端点的区间一定满足左端点不超过 L,且右端点大于等于 L.考虑若有超过 K 个区间符合要求,那么肯定是选取较大的 K 个区间的答案更优,因此只需求出符合条件的区间右端点的第 K 大值,并更新答案即可.再考虑 L…
枚举左端点,然后在线段树内,更新所有左边界小于当前点的区间的右端点,然后查线段树二分查第k大就好 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; ; LL a[N]; struct Node{ int l,r; bool operator<(const Node &rhs)const{ if(l==rhs…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1672 题意: 思路:其实这就是一个经典的区间贪心问题,只需要按照左端点排序,然后用优先队列维护,每次将右端点最小的点出队列. #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vector> #includ…
二分答案 + two - pointer + 树状数组大法好ヽ(゚∀゚)メ(゚∀゚)ノ 我们可以直接二分一个答案,然后检验 是否存在一个值大于等于这个二分的答案的,且覆盖次数大于等于 \(k\) 的区间.这个过程我们用 two- pointer 来实现,当左右指针包含的区间权值大于等于二分的答案时,只要检查一下是否被 \(k\) 个区间覆盖并不断右移左端点即可.如何快速统计覆盖一段区间的区间有多少个呢?如果我们把区间按左端点排序之后依次加入树状数组,则当我们的两个指针中的左指针移动到 \(l\)…