BZOJ 1828 [Usaco2010 Mar]balloc 农场分配(贪心+线段树)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1828
【题目大意】
  现在有一些线段[l,r]的需求需要满足,i位置最多允许a[i]条线段堆叠,
      问最多能满足多少条线段的需求
【题解】
  我们将所有的线段按照右端点排序,那么从头到尾考虑能不能满足需求一定能得到最优解,
      因为对于相同右端点的来说,先后顺序不影响放入,
      而对于右端点不同的来说,右端点靠前的先处理一定比靠后的先处理更优。
      处理方式相当于线段树的区间查询和区间修改。
【代码】
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=100010;
const int INF=0x3f3f3f3f;
struct data{int l,r;}p[N];
bool cmp(data a,data b){return a.r<b.r;}
int tag[N<<2],T[N<<2],a[N];
void up(int x){T[x]=min(T[x<<1],T[x<<1|1]);}
void pd(int x){
if(tag[x]){
T[x<<1]+=tag[x]; T[x<<1|1]+=tag[x];
tag[x<<1]+=tag[x]; tag[x<<1|1]+=tag[x];
tag[x]=0;
}
}
void build(int x,int l,int r){
int mid=(l+r)>>1;
if(l==r){T[x]=a[l];tag[x]=0;return;}
build(x<<1,l,mid); build(x<<1|1,mid+1,r);
up(x);
}
void update(int x,int l,int r,int L,int R,int p){
int mid=(l+r)>>1;
if(L<=l&&r<=R){T[x]+=p;tag[x]+=p;return;} pd(x);
if(L<=mid)update(x<<1,l,mid,L,R,p);
if(R>mid)update(x<<1|1,mid+1,r,L,R,p);
up(x);
}
int query(int x,int l,int r,int L,int R){
int mid=(l+r)>>1;
//printf("%d %d %d\n",l,r,T[x]);
if(L<=l&&r<=R)return T[x]; pd(x);
int res=INF;
if(L<=mid)res=min(res,query(x<<1,l,mid,L,R));
if(R>mid)res=min(res,query(x<<1|1,mid+1,r,L,R));
return res;
}
int n,m;
int main(){
while(~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",&p[i].l,&p[i].r);
sort(p+1,p+m+1,cmp);
int ans=0;
for(int i=1;i<=m;i++){
int x=query(1,1,n,p[i].l,p[i].r);
//printf("%d %d\n",p[i].l,p[i].r);
//printf("%d\n",x);
if(x){
ans++;
update(1,1,n,p[i].l,p[i].r,-1);
}
}printf("%d\n",ans);
}return 0;
}
BZOJ 1828 [Usaco2010 Mar]balloc 农场分配(贪心+线段树)的更多相关文章
- BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树
		BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树 Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数 ... 
- bzoj 1828: [Usaco2010 Mar]balloc 农场分配【贪心+线段树】
		长得挺唬人的贪心,按照右端点排序,用最小值线段树的询问判断当前牛是否能放进去,能的话更新线段树,ans++ 来自https://www.cnblogs.com/rausen/p/4529245.htm ... 
- BZOJ 1828: [Usaco2010 Mar]balloc 农场分配
		Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i ... 
- 【BZOJ】1828: [Usaco2010 Mar]balloc 农场分配(经典贪心)
		[算法]贪心+线段树 [题意]给定n个数字ci,m个区间[a,b](1<=a,b<=10^5),每个位置最多被ci个区间覆盖,求最多选择多少区间. 附加退化问题:全部ci=1,即求最多的不 ... 
- BZOJ1828 [Usaco2010 Mar]balloc 农场分配
		直接贪心,我们把线段按照右端点从小到大排序,然后一个个尝试插入即可... 来证明贪心的正确性: 不妨设贪心得到的答案集合为$S$,最优解的答案集合为$T$ 若$S$不是最优解,那么$S \not= T ... 
- BZOJ.3307.雨天的尾巴(dsu on tree/线段树合并)
		BZOJ 洛谷 \(dsu\ on\ tree\).(线段树合并的做法也挺显然不写了) 如果没写过\(dsu\)可以看这里. 对修改操作做一下差分放到对应点上,就成了求每个点子树内出现次数最多的颜色, ... 
- BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库
		正解:贪心+线段树/set库 解题报告: 算辣直接甩链接qwq 恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明 (这里有个,很妙的想法,就是,从后往前推从前往后 ... 
- 【题解】P1712 [NOI2016]区间(贪心+线段树)
		[题解]P1712 [NOI2016]区间(贪心+线段树) 一个observe是,对于一个合法的方案,将其线段长度按照从大到小排序后,他极差的来源是第一个和最后一个.或者说,读入的线段按照长度分类后, ... 
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
		[Usaco2010 Mar]gather 奶牛大集会 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1 ... 
随机推荐
- 简易微信小程序签到功能
			一.效果图 点击签到后 二.数据库 用一张数据表存用户签到的信息,每次用户签到都会往表中添加一条记录了用户id和签到日期的数据,如下图 三.后端 后端写两个接口,一个用于查询用户今日是否签到和签到记录 ... 
- Double类型的数据四舍五入保留小数点后两位
			4种方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberF ... 
- AndroidStudio 添加Selector文件,在res文件夹下添加文件夹
			在res文件夹下添加文件夹: 添加Selector文件: 
- 设计模式之Prototype
			设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 为什么要用Prototype ... 
- Python阶段复习 - part 4 - 用户登录程序
			简易版: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__:Dahlhin import sys userinfo = r'userinf ... 
- wait与waitpid
			1. 函数原型: #include <sys/wait.h> pid_t wait(int *statloc); pid_t waitpid(pid_t pid, int *statloc ... 
- .gitignore 文件添加或更新后规则无效的解决方案
			项目已经提交之后,突然想忽略某个文件或目录 A,于是在 .gitignore 里添加了忽略规则.但是提交(commit)之后,发现一旦修改了 A,git 同样会检测到 A 的变化(changes) , ... 
- Composer 手动安装
			Linux/Mac 环境 sudo wget -O /usr/local/bin/composer https://dl.laravel-china.org/composer.phar sudo ch ... 
- Linux(Unix)密码策略问题导致root密码不能修改
			Linux(Unix)密码策略问题导致root密码不能修改 发布时间: 2016-01-19 浏览次数: 1034 下载次数: 5 用户修改了密码配置文件,导致root账户修改密码时报如下错误: ... 
- C# 读写XML文件示例
			using System; using System.Collections.Generic; using System.Text; using System.Configuration; using ... 
