51nod 1672 贪心/队列
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1672
第一行三个数n,k,m(1<=n<=100000,1<=k<=m<=100000)。
接下来一行n个数ai,表示小A的数列(0<=ai<=10^9)。
接下来m行,每行两个数li,ri,表示每个区间(1<=li<=ri<=n)。
一行表示答案
5 2 3
1 2 3 4 6
4 5
2 5
1 4
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 贪心/队列的更多相关文章
- 51nod 1672 区间交(贪心)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1672 题意: 思路:其实这就是一个经典的区间贪心问题,只需要按照左端点排 ...
- 51nod 1163贪心
用优先队列来贪心,是一个很好地想法.优先队列在很多时候可以维护最值,同时可以考虑到一些其他情况. http://www.51nod.com/onlineJudge/questionCode.html# ...
- [Swust OJ 352]--合并果子(贪心+队列模拟)
题目链接:http://acm.swust.edu.cn/problem/352/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- 51nod 1625 贪心/思维
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1625 1625 夹克爷发红包 基准时间限制:1 秒 空间限制:13107 ...
- 51nod 1099 贪心/思维
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1099 1099 任务执行顺序 基准时间限制:1 秒 空间限制:13107 ...
- 51nod 1428 贪心
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活动安排问题 基准时间限制:1 秒 空间限制:13107 ...
- (贪心+队列)String
http://acm.hdu.edu.cn/showproblem.php?pid=6586 将26个字母各自放入队列中,并记下每个位置各字母的后缀和.往k个位置贪心的放字母,先从a开始尝试.首先字母 ...
- 51nod 1449 贪心
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1449 1449 砝码称重 题目来源: CodeForces 基准时间限制 ...
- 51nod 1255 贪心/构造
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1255 1255 字典序最小的子序列 题目来源: 天津大学OJ 基准时间限 ...
随机推荐
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
修改device/other/TBDG1073/ system.prop文件 1.设置默认语言 找到device/other/TBDG1073/ system.prop文件,修改属性ro.produc ...
- jquery on 确认删除
$(document).on('click', '.delbtn', function() { if (confirm("确定要删除吗?")) { ...
- boost之数学与数字
1.random随机数产生,需要种子,下面以时间为种子示例: #include <iostream> #include <string> #include <vector ...
- Amazon2014在线笔试 第三题
问题描述: 算法分析: s1:层数对齐:分别求两个数所在的层(l1,l2),把层数大的(假设l2>l1)先往上找父节点,从而对齐到l1层: s2:两个数同时往上找, 直到找到公共的父节点(一定能 ...
- Python之函数总结
一,函数的定义与调用 定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":". def 是固定的,不能变,必须是连续的def三个字母,不能分开 def 函数名 ...
- 曾经跳过的坑----jQuery mouseover与mouseenter,mouseout与mouseleave的区别
mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseou ...
- 极速Node.js:来自LinkedIn的10个性能提升秘籍
from:http://faylai.iteye.com/blog/1293194 1.避免使用同步的方法 nodejs 是基于单线程.为了让单线程能够处理高并发的请求,我们尽量要避免让线程等待,阻塞 ...
- Yii2 自定义独立验证器
新建一个文件: ?php /** * author : forecho <caizhenghai@gmail.com> * createTime : 2015/7/1 14:54 * de ...
- Linux权限管理 chattr命令、lsattr命令、sudo命令
chattr命令 chattr命令用来修改文件系统的权限属性 chatrr 只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权. chatrr 命令格式如 ...
- 主攻ASP.NET MVC4.0之重生:MVC Controller修改Controller.tt模版,自动添加版本注释信息
第一步找到MVC 4.0 CodeTemplates 一般路径在:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Ite ...