bzoj1828: [Usaco2010 Mar]balloc 农场分配 线段树+贪心
2017-05-13 10:36
441 查看
。。其实是区间覆盖的加强版。。
区间覆盖基本上都是右端点排序以后贪心做,这题看了一下好像也是这样。。
直接排序以后线段树上就可以了,好像不用延迟标记会wa。。不知道为啥。。
区间覆盖基本上都是右端点排序以后贪心做,这题看了一下好像也是这样。。
直接排序以后线段树上就可以了,好像不用延迟标记会wa。。不知道为啥。。
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=1e5+5; const int inf=1e9+5; struct data { int l,r; int mn,lazy; }t[N*10]; struct node { int l,r,id; }q ; int a ,ans; int n,m; bool cmp(node a,node b) { return (a.r<b.r); } inline void build(int x,int l,int r) { t[x].l=l; t[x].r=r; if (l==r) { t[x].mn=a[l]; return ; } int mid=(l+r)>>1; build(x<<1,l,mid); build(x<<1|1,mid+1,r); t[x].mn=min(t[x<<1].mn,t[x<<1|1].mn); } inline void pushdown(int x) { int ls=x<<1,rs=x<<1|1; t[ls].mn+=t[x].lazy; t[rs].mn+=t[x].lazy; t[ls].lazy+=t[x].lazy; t[rs].lazy+=t[x].lazy; t[x].lazy=0; } inline void change(int x,int l,int r) { if (t[x].l==l&&t[x].r==r) { t[x].mn--; t[x].lazy--; return ; } if (t[x].lazy)pushdown(x); int mid=(t[x].l+t[x].r)>>1; if (r<=mid)change(x<<1,l,r); else if (l>mid)change(x<<1|1,l,r); else change(x<<1,l,mid),change(x<<1|1,mid+1,r); t[x].mn=min(t[x<<1].mn,t[x<<1|1].mn); } inline int query(int x,int l,int r) { if (t[x].l==l&&t[x].r==r) { return t[x].mn; } if (t[x].lazy)pushdown(x); int mid=(t[x].l+t[x].r)>>1; if (r<=mid)return query(x<<1,l,r); else if (l>mid)return query(x<<1|1,l,r); else return min(query(x<<1,l,mid),query(x<<1|1,mid+1,r)); } int main() { scanf("%d%d",&n,&m); fo(i,1,n)scanf("%d",&a[i]); build(1,1,n); fo(i,1,m) { scanf("%d%d",&q[i].l,&q[i].r); q[i].id=i; } sort(q+1,q+1+m,cmp); fo(i,1,m) { if (query(1,q[i].l,q[i].r)) change(1,q[i].l,q[i].r),++ans; } printf("%d\n",ans); return 0; }
相关文章推荐
- bzoj:1828: [Usaco2010 Mar]balloc 农场分配
- 【BZOJ】1828: [Usaco2010 Mar]balloc 农场分配(经典贪心)
- [BZOJ1828][Usaco2010 Mar]balloc 农场分配(贪心+线段树)
- BZOJ1828: [Usaco2010 Mar]balloc 农场分配
- BZOJ1828 [Usaco2010 Mar]balloc 农场分配
- bzoj 1828: [Usaco2010 Mar]balloc 农场分配 (贪心+线段树)
- BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树
- BZOJ 1828: [Usaco2010 Mar]balloc 农场分配
- BZOJ 1828: [Usaco2010 Mar]balloc 农场分配 线段树 贪心
- bzoj 1828: [Usaco2010 Mar]balloc 农场分配【贪心+线段树】
- BZOJ 1828 [Usaco2010 Mar]balloc 农场分配(贪心+线段树)
- 【bzoj1828/Usaco2010 Mar】balloc 农场分配——贪心+差分+优先队列
- [贪心][Usaco2010 Mar]balloc 农场分配
- BZOJ1828: [Usaco2010 Mar]balloc 农场分配 贪心+线段树
- BZOJ1828: [Usaco2010 Mar]balloc 农场分配
- [Usaco2010 Mar]balloc 农场分配
- 【bzoj1828】[Usaco2010 Mar]
- 【bzoj1828】[Usaco2010 Mar]
- BZOJ1827 [Usaco2010 Mar]gather 奶牛大集会
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会