http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1672

1672 区间交

基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注
小A有一个含有n个非负整数的数列与m个区间,每个区间可以表示为li,ri。

它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大。(是指k个区间共同的交,即每个区间都包含这一段,具体可以参照样例)
 
在样例中,5个位置对应的值分别为1,2,3,4,6,那么选择[2,5]与[4,5]两个区间的区间交为[4,5],它的值的和为10。
Input
第一行三个数n,k,m(1<=n<=100000,1<=k<=m<=100000)。
接下来一行n个数ai,表示小A的数列(0<=ai<=10^9)。
接下来m行,每行两个数li,ri,表示每个区间(1<=li<=ri<=n)。
Output
一行表示答案
Input示例
5 2 3
1 2 3 4 6
4 5
2 5
1 4
Output示例
10

  简化版的是求两个区间相交的最大值,而这个求k个区间相交的最大值,前者是维护一个最大的右端点同理,我们维护k个较大的右端点就好了。
先按照左端点升序排列,这样的话固定了左端点只考虑右端点就好了,每次询问一个区间找到当前队列中右端点最小的那个做交集,之后再判断要不要把当前右端点加入如果更优的话。
 #include<bits/stdc++.h>
using namespace std;
#define LL long long
priority_queue<int,vector<int>,greater<int> >q;
LL A[];
struct node{int l,r;}P[];
bool cmp(node A,node B)
{
if(A.l!=B.l) return A.l<B.l;
else return A.r>B.r;
}
int main()
{
int n,m,k,i,j;
LL ans=;
while(cin>>n>>k>>m){
for(i=;i<=n;++i) scanf("%lld",&A[i]),A[i]+=A[i-];A[n+]=A[n];
for(i=;i<=m;++i) scanf("%d%d",&P[i].l,&P[i].r);
if(k==){
for(i=;i<=m;++i)
ans=max(ans,A[P[i].r]-A[P[i].l-]);
}
else{
sort(P+,P++m,cmp);
for(i=;i<=m;++i)
{
if(q.size()<k-) q.push(P[i].r);
else{
ans=max(ans,A[min(q.top(),P[i].r)]-A[P[i].l-]);//一开始写的q.top()导致WA
q.push(P[i].r);
q.pop();
}
}
}
printf("%lld\n",ans);
}
return ;
}

51nod 1672 贪心/队列的更多相关文章

  1. 51nod 1672 区间交(贪心)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1672 题意: 思路:其实这就是一个经典的区间贪心问题,只需要按照左端点排 ...

  2. 51nod 1163贪心

    用优先队列来贪心,是一个很好地想法.优先队列在很多时候可以维护最值,同时可以考虑到一些其他情况. http://www.51nod.com/onlineJudge/questionCode.html# ...

  3. [Swust OJ 352]--合并果子(贪心+队列模拟)

    题目链接:http://acm.swust.edu.cn/problem/352/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  4. 51nod 1625 贪心/思维

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1625 1625 夹克爷发红包 基准时间限制:1 秒 空间限制:13107 ...

  5. 51nod 1099 贪心/思维

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1099 1099 任务执行顺序 基准时间限制:1 秒 空间限制:13107 ...

  6. 51nod 1428 贪心

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活动安排问题 基准时间限制:1 秒 空间限制:13107 ...

  7. (贪心+队列)String

    http://acm.hdu.edu.cn/showproblem.php?pid=6586 将26个字母各自放入队列中,并记下每个位置各字母的后缀和.往k个位置贪心的放字母,先从a开始尝试.首先字母 ...

  8. 51nod 1449 贪心

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1449 1449 砝码称重 题目来源: CodeForces 基准时间限制 ...

  9. 51nod 1255 贪心/构造

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1255 1255 字典序最小的子序列 题目来源: 天津大学OJ 基准时间限 ...

随机推荐

  1. 解决john不能开多个进程的问题

    在使用john进行shadow文件破解时,如果已经开了一个john的进程,这回提示以下错误: Crash recovery file is locked: /root/.john/john.rec   ...

  2. 前端基础 DOM & BOM

    推荐阅读:http://www.cnblogs.com/yuanchenqi/articles/6893904.html#_label3 BOM对象 window 对象 所有浏览器都支持 window ...

  3. 我的Android进阶之旅------>Android的ListView数据更新后,如何使最新的条目可以自动滚动到可视范围内?

    在ListView的layout配置中添加 android:transcriptMode="alwaysScroll" <ListView android:id=" ...

  4. HTTP1.1中CHUNKED编码解析

    一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RFC  1945  10.4章节中.浏览器 ...

  5. JS字符串数组转换

    字符串转数组: str.split(';') 数组转字符串: arr.join(';')

  6. fastReport 绑定DataBand数据源后还是打印出一条数据

    升级了fastreport到v2018后,打印出现问题,datasource是多条数据,可打印出来始终只显示第一条 DataBand dataBand = report.FindObject(&quo ...

  7. qt_hal_verion

    /opt/EmbedSky/B2/linux-3.0.35/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h 文件中的具体版本 export DI ...

  8. MySql 5.7 详细参数说明

    max_connections: 允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000 max_connect_errors: 如果客户端尝试连接的错误数量超过这个参数设置 ...

  9. jQuery可放大预览的图片滑块

    在线演示 本地下载

  10. poj2442优先队列

    感谢 http://hi.baidu.com/%C0%B6%C9%ABarch/blog/item/f9d343f49cd92e53d7887d73.html 的博主! 思路: 我们要找到n个smal ...