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

【题目大意】

  给出一个长度为n的数列和m个区间,现在求k个区间,使得他们的区间交内的数列项和最大。

【题解】

  将区间按照右端点为第一关键字排序,
  那么在从后往前扫描的过程中,已经扫过的部分右端点一定大于当前
  所以我们可以枚举区间交的右端点,找出第k小的左端点,来更新答案
  因为右端点固定,因此左端点越小,答案一定越大,
  所以枚举右端点不会遗漏答案。

【代码】

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=200000,M=200000;
typedef long long LL;
int k,q,x,y,T[M<<2],n,m;
void up(int x){T[x]=T[x<<1]+T[x<<1|1];}
void update(int t,int num,int l,int r,int x){
if(l==r){T[x]+=num;return;}
int mid=(l+r)>>1;
if(t<=mid)update(t,num,l,mid,x<<1);
else update(t,num,mid+1,r,x<<1|1);
up(x);
}
int find(int k,int l,int r,int x){
int mid=(l+r)>>1,tmp=T[x<<1];
if(l==r)return l;
if (k<=tmp)return find(k,l,mid,x<<1);
else return find(k-tmp,mid+1,r,x<<1|1);
}
LL s[N];
struct data{int l,r;}p[N];
bool cmp(data a,data b){return a.r<b.r||a.r==b.r&&a.l<b.l;}
int main(){
while(~scanf("%d%d%d",&n,&k,&m)){
memset(T,0,sizeof(T));
for(int i=1;i<=n;i++){
scanf("%d",&x);
s[i]=s[i-1]+x;
}for(int i=1;i<=m;i++)scanf("%d%d",&p[i].l,&p[i].r);
sort(p+1,p+m+1,cmp);
for(int i=m;i>m-k+1;i--)update(p[i].l,1,1,n,1);
LL ans=0;
for(int i=m-k+1;i;i--){
update(p[i].l,1,1,n,1);
int t=find(k,1,n,1);
if(t<=p[i].r)ans=max(ans,s[p[i].r]-s[t-1]);
}printf("%lld\n",ans);
}return 0;
}

  

最新文章

  1. (转载)html中table的使用方法
  2. c/c++ printf
  3. 论一次iOS面试
  4. RESTful 良好的API设计风格
  5. sql分组取第一条数据
  6. oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
  7. [Angular 2] Directive intro and exportAs
  8. Android——ExpandableListView事件拦截
  9. 谈谈文件增量同步算法:RSYNC和CDC
  10. Scout YYF I POJ - 3744(矩阵优化)
  11. Pyhton语句
  12. Android Studio中Git和GitHub使用详解
  13. Python之路,第八篇:Python入门与基础8
  14. MCU_数码管常用表
  15. Python 爬虫编码格式问题 gb2312转换utf8
  16. Linux objdump命令
  17. ClientDataset 三层 var and out arguments must match parameter
  18. QQ自动发送+@好友功能+tencent://功能
  19. lumen配置日志daily模式
  20. asp.net如何实现跟踪检查用户知否查看了邮件。

热门文章

  1. Python即时网络爬虫:API说明
  2. Java application 性能分析分享
  3. (十二)boost库之多线程高级特性
  4. 如何优化pom依赖项?
  5. linux之SQL语句简明教程---BETWEEN
  6. poj 1458 Common Subsequence_最长公共子串
  7. Error:/bin/bash: /bin/java: No such file or directory
  8. mysql基础:mysql与C结合实例
  9. Fix Elementary Boot Screen (plymouth) After Installing Nvidia Drivers
  10. hibou 主界面自己侧滑的定义