AC日记——[USACO10MAR]仓配置Barn Allocation 洛谷 P1937

Posted Only U - IU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AC日记——[USACO10MAR]仓配置Barn Allocation 洛谷 P1937相关的知识,希望对你有一定的参考价值。

[USACO10MAR]仓配置Barn Allocation

 

思路:

  贪心+线段树维护;

 

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 100005
#define INF 0x3f3f3f3f
#define maxtree maxn<<2
struct QueryType
{
    int l,r;
    bool operator<(const QueryType pos)const
    {
        if(pos.r==r) return l<pos.l;
        return r<pos.r;
    }
};
struct QueryType qu[maxn];
int n,m,ai[maxn],L[maxtree],R[maxtree],mid[maxtree],val[maxtree],tag[maxtree];
inline void in(int &now)
{
    char Cget=getchar();now=0;
    while(Cget>9||Cget<0)Cget=getchar();
    while(Cget>=0&&Cget<=9)
    {
        now=now*10+Cget-0;
        Cget=getchar();
    }
}
void build(int now,int l,int r)
{
    L[now]=l,R[now]=r;
    if(l==r)
    {
        val[now]=ai[l];
        return ;
    }
    mid[now]=l+r>>1;
    build(now<<1,l,mid[now]);
    build(now<<1|1,mid[now]+1,r);
    val[now]=min(val[now<<1],val[now<<1|1]);
}
void pushdown(int now)
{
    val[now<<1]+=tag[now],tag[now<<1]+=tag[now];
    val[now<<1|1]+=tag[now],tag[now<<1|1]+=tag[now];
    tag[now]=0;
}
void updata(int now,int l,int r)
{
    if(L[now]>=l&&R[now]<=r)
    {
        val[now]--,tag[now]--;
        return;
    }
    if(tag[now]!=0) pushdown(now);
    if(l<=mid[now]) updata(now<<1,l,r);
    if(r>mid[now]) updata(now<<1|1,l,r);
    val[now]=min(val[now<<1],val[now<<1|1]);
}
int query(int now,int l,int r)
{
    if(L[now]>=l&&R[now]<=r) return val[now];
    if(tag[now]!=0) pushdown(now);int res=INF;
    if(l<=mid[now]) res=min(res,query(now<<1,l,r));
    if(r>mid[now]) res=min(res,query(now<<1|1,l,r));
    return res;
}
int main()
{
    in(n),in(m);
    for(int i=1;i<=n;i++) in(ai[i]);
    for(int i=1;i<=m;i++) in(qu[i].l),in(qu[i].r);
    sort(qu+1,qu+m+1),build(1,1,n);int ans=0;
    for(int i=1;i<=m;i++)
    {
        if(query(1,qu[i].l,qu[i].r)) ans++,updata(1,qu[i].l,qu[i].r);
    }
    cout<<ans;
    return 0;
}

 

以上是关于AC日记——[USACO10MAR]仓配置Barn Allocation 洛谷 P1937的主要内容,如果未能解决你的问题,请参考以下文章

[USACO17DEC] Barn Painting

AC日记——[USACO5.4]奶牛的电信Telecowmunication 洛谷 P1345

AC日记——[USACO15DEC]最大流Max Flow 洛谷 P3128

AC日记——[USACO11DEC]牧草种植Grass Planting 洛谷 P3038

AC日记——[USACO08DEC]干草出售Hay For Sale 洛谷 P2925

AC日记——[USACO06FEB]奶牛零食Treats for the Cows 洛谷 P2858