题目描述

输入

第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i

输出

* 第一行: 一个整数表示最多能够被满足的要求数

样例输入

5 4
1
3
2
1
3
1 3
2 5
2 3
4 5

样例输出

3
 
对于区间覆盖这一类的问题,贪心是一个很好的思路。优先选右端点小的,这个很好证明:选了一段区间后,如果有更优解,也就是这段区间能被其他两段区间代替,那么这两个区间不会有相同部分,但因为这段区间之后的所有区间右端点都大于等于这个区间的右端点,所以假设中的更优解的那两段区间在这段区间上一定有重叠部分,所以假设不成立,没有更优解。所以将所有区间排个序然后依次选,用线段树维护一下区间最小值,如果所要加区间最小值<=0那么就加不了,否则就将区间每个数值都减1。
最后附上代码。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int l,r;
}s[100010];
int n,m,ans;
int a[100010];
int mi[400010];
int sign[400010];
void updata(int x)
{
mi[x]=min(mi[x<<1],mi[(x<<1)+1]);
}
void pushdown(int x,int l,int r)
{
if(sign[x])
{
mi[x<<1]+=sign[x];
sign[x<<1]+=sign[x];
mi[(x<<1)+1]+=sign[x];
sign[(x<<1)+1]+=sign[x];
sign[x]=0;
}
}
void build(int x,int l,int r)
{
int mid=(l+r)>>1;
if(l==r)
{
mi[x]=a[l];
return ;
}
build(x<<1,l,mid);
build((x<<1)+1,mid+1,r);
updata(x);
}
void change(int x,int l,int r,int L,int R,int v)
{
int mid=(l+r)>>1;
if(L<=l&&R>=r)
{
mi[x]+=v;
sign[x]+=v;
return ;
}
pushdown(x,l,r);
if(L<=mid)
{
change(x<<1,l,mid,L,R,v);
}
if(R>=mid+1)
{
change((x<<1)+1,mid+1,r,L,R,v);
}
updata(x);
}
bool cmp(node x,node y)
{
if(x.r!=y.r)
{
return x.r<y.r;
}
return x.l>y.l;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
build(1,1,n);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&s[i].l,&s[i].r);
}
sort(s+1,s+1+m,cmp);
for(int i=1;i<=m;i++)
{
change(1,1,n,s[i].l,s[i].r,-1);
if(mi[1]<0)
{
change(1,1,n,s[i].l,s[i].r,1);
}
else
{
ans++;
}
}
printf("%d",ans);
}

BZOJ1828[USACO 2010 Mar Gold 2.Barn Allocation]——贪心+线段树的更多相关文章

  1. BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP

    题目描述 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,000) 个农场 ...

  2. BZOJ1785[USACO 2010 Jan Gold 3.Cow Telephones]——贪心

    题目描述 奶牛们建立了电话网络,这个网络可看作为是一棵无根树连接n(1 n 100,000)个节点,节点编号为1 .. n.每个节点可能是(电话交换机,或者电话机).每条电话线连接两个节点.第i条电话 ...

  3. BZOJ 1828 [Usaco2010 Mar]balloc 农场分配(贪心+线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1828 [题目大意] 现在有一些线段[l,r]的需求需要满足,i位置最多允许a[i]条线 ...

  4. bzoj 1828: [Usaco2010 Mar]balloc 农场分配【贪心+线段树】

    长得挺唬人的贪心,按照右端点排序,用最小值线段树的询问判断当前牛是否能放进去,能的话更新线段树,ans++ 来自https://www.cnblogs.com/rausen/p/4529245.htm ...

  5. poj 2010 Moo University - Financial Aid (贪心+线段树)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 骗一下访问量.... 题意大概是:从c个中选出n个 ...

  6. [USACO 2012 Mar Gold] Large Banner

    传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=127 又是一道这种题目,遇到一次跪一次,这次终于硬着头皮看懂了题解,但是谢 ...

  7. Usaco 2010 Dec Gold Exercise(奶牛健美操)

    /*codevs 3279 二分+dfs贪心检验 堆版本 re一个 爆栈了*/ #include<cstdio> #include<queue> #include<cst ...

  8. BZOJ1782[USACO 2010 Feb Gold 3.Slowing down]——dfs+treap

    题目描述 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场.牧场构成了一棵树,粮仓在1号牧场.恰好有N-1条道路直接连接着牧场, ...

  9. BZOJ1916[USACO 2010 Open Gold 2.Water Slides]——DP+记忆化搜索

    题目描述 受到秘鲁的马丘比丘的新式水上乐园的启发,Farmer John决定也为奶牛们建 一个水上乐园.当然,它最大的亮点就是新奇巨大的水上冲浪.超级轨道包含 E (1 <= E <=15 ...

随机推荐

  1. linxu自定义安装及网络配置

    1.VMware及Centos6下载 链接:https://pan.baidu.com/s/1XMgBXA13e2zovijhcyciIA   提取码:5sqg 2.安装VMware:略 3.安装虚拟 ...

  2. Zephyr的Power Management

    1 关于Zephyr Zephyr是Linux基金会维护的微内核项目,来源于WindRiver向Zephyr捐赠的Rocket RTOS内核.主要用于开发针对物联网设备的实时操作系统. Zephyr操 ...

  3. http一次请求过程

    物理层:支持底层网络协议: 其中网络层支持IP协议: 传输层支持TCP协议,它是面向连接的: 应用层支持 http,ftp  tftp,SMTP,DHCP协议 一个完整的http请求过程: 1.浏览器 ...

  4. odoo订餐系统之菜单设计

    1.model类的设计 class MyLunchProduction(osv.Model): _name = "mylunch.production" _description ...

  5. EZ 2018 05 20 NOIP2018 模拟赛(十五)

    这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...

  6. Luogu P1439 【模板】最长公共子序列

    又是模板题呵,但这次的难度有点增加. 先看题目第一个想到DP的经典算法,要O(n^2),然后想其它的算法. 其实我们衢州市一次联考有一题很像这题,不过还要难一点. 思想是离散化+最长不下降子序列(在这 ...

  7. MongoDB的导入导出

    一:MongoDB的导出功能 mongodb提供了导入和导出的功能,分别是MongoDB下载目录下的mongoexport.exe和mongoimport.exe文件 ,具体的导出命令格式如下: mo ...

  8. ES6入门之let、cont

    一.前提 解决ES5中只有全局作用域和函数作用域,没有块级作用域而带来的不合理的场景. let 基本用法 用法和var 一样,只是let声明的变量只有在let命令所在的代码块有效 { let a = ...

  9. Ext JS 4 的类系统

    前言 我们知道,JavaScript中没有真正的类,它是一种面向原型的语言 .这种语言一个强大的特性就是灵活,实现一个功能可以有很多不同的方式,用不同的编码风格和技巧.但随之也带来了代码的不可预测和难 ...

  10. 手机APP自动化之uiautomator2 +python3 UI自动化

    题记: 之前一直用APPium直到用安卓9.0  发现uiautomatorviewer不支持安卓 9.0,点击截屏按钮 一直报错,百度很久解决方法都不可以,偶然间看见有人推荐:uiautomator ...