HDU 5700 区间交 线段树暴力
枚举左端点,然后在线段树内,更新所有左边界小于当前点的区间的右端点,然后查线段树二分查第k大就好
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = ;
LL a[N];
struct Node{
int l,r;
bool operator<(const Node &rhs)const{
if(l==rhs.l)return r<rhs.r;
return l<rhs.l;
}
}p[N];
int c[N<<];
void add(int rt,int l,int r,int x){
++c[rt];
if(l==r)return;
int m=(l+r)>>;
if(x<=m)add(rt<<,l,m,x);
else add(rt<<|,m+,r,x);
}
int ask(int rt,int l,int r,int k){
if(l==r)return l;
int m=(l+r)>>;
if(c[rt<<|]>=k)ask(rt<<|,m+,r,k);
else ask(rt<<,l,m,k-c[rt<<|]);
}
int main(){
int n,k,m;
while(~scanf("%d%d%d",&n,&k,&m)){
for(int i=;i<=n;++i){
LL x;scanf("%I64d",&x);
a[i]=a[i-]+x;
}
for(int i=;i<=m;++i){
scanf("%d%d",&p[i].l,&p[i].r);
}
sort(p+,p++m);
memset(c,,sizeof(c));
int cnt=;
LL res=;
for(int i=;i<=m;++i){
for(;cnt<=m&&p[cnt].l<=p[i].l;++cnt)
add(,,n,p[cnt].r);
if(c[]<k)continue;
int cur=ask(,,n,k);
if(cur>=p[i].l)res=max(res,a[cur]-a[p[i].l-]);
}
printf("%I64d\n",res);
}
return ;
}
HDU 5700 区间交 线段树暴力的更多相关文章
- hdu 5700区间交(线段树)
区间交 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- HDU 5700 区间交 离线线段树
区间交 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5700 Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为 ...
- HDU 5700 区间交(线段树)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5700 [题目大意] 给出一个长度为n的数列和m个区间,现在求k个区间,使得他们的区间交内的数列项和 ...
- HDU 5700——区间交——————【线段树+枚举】
区间交 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- HDU 5700 区间交
枚举起点 二分终点 树状数组check #include<iostream> #include<cstring> #include<cmath> #include& ...
- HDU 1540 区间合并线段树
题目大意: 就是给定一堆位置,进行删除还原,最后找到 t 位置上的最大连续位置 #include <cstdio> #include <cstring> #include &l ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- 【BZOJ4653】【NOI2016】区间(线段树)
[BZOJ4653][NOI2016]区间(线段树) 题面 BZOJ 题解 \(NOI\)良心送分题?? 既然是最大长度减去最小长度 莫名想到那道反复减边求最小生成树 从而求出最小的比值 所以这题的套 ...
- BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针
BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...
随机推荐
- 【BZOJ2049】 [Sdoi2008]Cave 洞穴勘测
Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...
- mybatis--面向接口编程
如果使用hiberante作为dao层,常用的方式是:定义一个dao层接口包(com.dao.service)然后在定义一个dao层接口实现包(com.dao.service.impl),这样定义结构 ...
- Partition an array around an interger
Partition an array of integers around a value such taht all elements less than x come before element ...
- java基本对象Integer,String比较相等及equal案例说明
Integer i = new Integer(100); Integer i2 = new Integer(100); if(i == i2){ System.out.println("A ...
- Top命令内存占用剖析
原文: http://yalung929.blog.163.com/blog/static/203898225201212981731971/ 引 言: top命令作为Linux下最常用的性能分析工具 ...
- [itint5]堆放积木
先按照一维排序,然后在第二维求最大上升子序列.注意比较的时候还要考虑第一维虽然排序,还是有可能相等的. bool comp(const Box &a, const Box &b) { ...
- c/c++中一些高级函数的使用
setvbuf 函数名: setvbuf 功 能: 把缓冲区与流相关 用 法: int setvbuf(FILE *stream, char *buf, int type, unsigned size ...
- java中dao层和service层的区别是什么?
首先解释面上意思,service是业务层,dao是数据访问层.呵呵,这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用 ...
- ERDAS IMAGINE 9.2安装破解方法
Install the application. Copy the license.dat and ERDAS.exe to C:\Program Files\Leica Geosystems\Sha ...
- AC题目简解-数据结构
A - Japan POJ 3067 要两条路有交叉,(x1,y1)(x2,y2)那么需要满足:(x1-x2)*(y1-y2)<0判断出这是求逆序的问题 树状数组求逆序,先通过自定义的比较器实 ...