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
Output
* 第一行: 一个整数表示最多能够被满足的要求数
题解:
将请求按右端点排序,然后依次添加,用线段树判断是否能添加,不能的放弃。统计个数即可。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
//by zrt
//problem:
using namespace std;
int minn[100005*4];
int mark[100005*4];
int c[100005];
void pd(int o){
if(mark[o]){
minn[o<<1]-=mark[o];
minn[o<<1|1]-=mark[o];
mark[o<<1]+=mark[o];
mark[o<<1|1]+=mark[o];
mark[o]=0;
}
}
void insert(int o,int l,int r,int L,int R){
if(l==L&&r==R){
mark[o]+=1;
minn[o]-=1;
return;
}else{
pd(o);
int m=(L+R)>>1;
if(r<=m) insert(o<<1,l,r,L,m);
else if(l>m) insert(o<<1|1,l,r,m+1,R);
else insert(o<<1,l,m,L,m),insert(o<<1|1,m+1,r,m+1,R);
minn[o]=min(minn[o<<1],minn[o<<1|1]);
}
}
void build(int o,int l,int r){
if(l==r){
minn[o]=c[l];
}else{
int m=(l+r)>>1;
build(o<<1,l,m);
build(o<<1|1,m+1,r);
minn[o]=min(minn[o<<1],minn[o<<1|1]);
}
}
bool ok;
void ask(int o,int l,int r,int L,int R){
if(l==L&&r==R) ok&=(minn[o]>0);
else{
pd(o);
int m=(L+R)>>1;
if(r<=m) ask(o<<1,l,r,L,m);
else if(l>m) ask(o<<1|1,l,r,m+1,R);
else ask(o<<1,l,m,L,m),ask(o<<1|1,m+1,r,m+1,R);
}
}
struct node{
int a,b;
}q[100005];
bool cmp(node a,node b){
return a.b<b.b;
}
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&c[i]);
}
for(int i=0;i<m;i++){
scanf("%d%d",&q[i].a,&q[i].b);
}
sort(q,q+m,cmp);
int ans=0;
build(1,1,n);
for(int i=0;i<m;i++){
ok=1;ask(1,q[i].a,q[i].b,1,n);
if(ok){
ans++;
insert(1,q[i].a,q[i].b,1,n);
}
}
printf("%d\n",ans);
return 0;
}
BZOJ 1828: [Usaco2010 Mar]balloc 农场分配的更多相关文章
- BZOJ 1828 [Usaco2010 Mar]balloc 农场分配(贪心+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1828 [题目大意] 现在有一些线段[l,r]的需求需要满足,i位置最多允许a[i]条线 ...
- bzoj 1828: [Usaco2010 Mar]balloc 农场分配【贪心+线段树】
长得挺唬人的贪心,按照右端点排序,用最小值线段树的询问判断当前牛是否能放进去,能的话更新线段树,ans++ 来自https://www.cnblogs.com/rausen/p/4529245.htm ...
- 【BZOJ】1828: [Usaco2010 Mar]balloc 农场分配(经典贪心)
[算法]贪心+线段树 [题意]给定n个数字ci,m个区间[a,b](1<=a,b<=10^5),每个位置最多被ci个区间覆盖,求最多选择多少区间. 附加退化问题:全部ci=1,即求最多的不 ...
- BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树
BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树 Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数 ...
- BZOJ1828 [Usaco2010 Mar]balloc 农场分配
直接贪心,我们把线段按照右端点从小到大排序,然后一个个尝试插入即可... 来证明贪心的正确性: 不妨设贪心得到的答案集合为$S$,最优解的答案集合为$T$ 若$S$不是最优解,那么$S \not= T ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
[Usaco2010 Mar]gather 奶牛大集会 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1 ...
- 【树形DP/搜索】BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会
1827: [Usaco2010 Mar]gather 奶牛大集会 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 793 Solved: 354[Sub ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会( dp + dfs )
选取任意一个点为root , size[ x ] 表示以 x 为根的子树的奶牛数 , dp一次计算出size[ ] && 选 root 为集会地点的不方便程度 . 考虑集会地点由 x ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
随机推荐
- WPF Command命令模式
//定义接口 public interface IView { bool IsChanged { get; set; } void SetBinding(); void Clear(); } //定义 ...
- c语言,strcat(),字符串拼接
#include<stdio.h> #include<string.h> int main() { char destination[25]; char *zhang=& ...
- BFM1
BFM应该描述的是具有某种具体功能的电路.比如说,你的待测电路是一个智能卡,那他的BFM就是读卡器:那你就要根据协议,在BFM中描述出读卡器的具体行为. 写BFM就类似于写testbench了.BFM ...
- 关于FPGA异步时钟采样--结绳法的点点滴滴
一.典型方法 典型方法即双锁存器法,第一个锁存器可能出现亚稳态,但是第二个锁存器出现亚稳态的几率已经降到非常小,双锁存器虽然不能完全根除亚稳态的出现(事实上所有电路都无法根除,只能尽可能降低亚稳态的出 ...
- JavaScript平常会跳的坑系列(一)
function Foo() { //定义foo函数 getName = function () { console.log('1');}; console.log(this); return thi ...
- jquery处理textarea中的手动换行
textarea的手动换行会产生换行标志,但这个标志存在却看不到,存入数据库中后读出来显示在页面上却不会换行,如何处理呢? 网上众说纷纭,经过测试用 textarea的内容.replace(/\n/g ...
- 一步一步学NUnit
转载:http://tech.sina.com.cn/s/2009-07-17/1129988785.shtml 单元测试基础知识 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的.很明 ...
- Touch事件or手机卫士面试题整理回答(二)
Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEve ...
- ABI Management
官方文档:https://developer.android.com/ndk/guides/abis.html?hl=is 关于支持指令集,在上表官方文档都表达清楚了.我们认为避免多个指令集浪费资源. ...
- asp.net中Get请求和Post请求
Get和Post请求的区别:Get请求因为传输的数据在URL中,因此不安全,而且多数浏览器有限制其长度,最长为2KB.通过Get请求获取数据的方式:string strName=context.Req ...