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;
}
时间: 2024-10-16 12:51:12

AC日记——[USACO10MAR]仓配置Barn Allocation 洛谷 P1937的相关文章

luogu1937 [USACO10MAR]仓配置Barn Allocation

题目:https://www.luogu.org/problemnew/show/P1937 算法:优先队列,贪心. 首先我们对所有牛以\(a_{i}\)第一关键字排序,然后再贪心处理怎样才能使答案达到最优. 具体怎么贪呢? 我们从\(1->n\)扫一遍,假设我们扫到\(i\),在这一个空间上已经容纳了\(j\)头牛,我们把所有\(a_{k}=i\)的牛先扔进这一个空间,我们假设这个空间可以无限大,那么我们的队列里就存了可能超出空间的牛. 接着我们在考虑容量问题,这个时候我们队列里已经有\(r\

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

题目描述 Farmer John has installed a new system of  pipes to transport milk between the  stalls in his barn (), conveniently numbered . Each pipe connects a pair of stalls, and all stalls are connected to each-other via paths of pipes. FJ is pumping milk

AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

[HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 int n,m,f[maxn],ch[maxn][2],rev[maxn],ki[maxn],sta[maxn],top,lit,size[maxn]; inline void in(int &now) { char Cget=getchar();now=0; while(Cget&

AC日记——让我们异或吧 洛谷 P2420

题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能够成为情侣 好了,现在我们来制造和处理一些复杂的情况.比如我们将给出一颗树,它很高兴自己有N个结点.树的每条边上有一个权值.我们要进行M次询问,对于每次询问,我们想知道某两点之间的路径上所有边权的异或值. 输入输出格式 输入格式: 输入文件第一行包含一个整数N,表示这颗开心的树拥有的结点数,以下有N

AC日记——斐波那契数列 洛谷 P1962

斐波那契数列 思路: 矩阵快速幂: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define mod 1000000007 struct MatrixType { long long ai[3][3]; void mem() { for(int i=0;i<3;i++) { for(i

AC日记——【模板】二分图匹配 洛谷 P3386

题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 输出格式: 共一行,二分图最大匹配 输入输出样例 输入样例#1: 1 1 1 1 1 输出样例#1: 1 说明 n,m<=1000,1<=u<=n,1<=v<=m 因为数据有坑,可能会遇到v>m的情况.请把v>m的数据自觉过滤掉. 算法:二分图匹配 思路: 二分图模

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

题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirectional roads, such that there is exactly one path between any two pastures. Bessie, a cow who loves her grazing time, often complains about how there is no grass on t

AC日记——Aragorn&#39;s Story HDU 3966

Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10510    Accepted Submission(s): 2766 Problem Description Our protagonist is the handsome human prince Aragorn comes from The Lor

AC自动机(附洛谷P3769模板题)

首先,介绍一下AC自动机(Aho-Corasick automaton),是一种在一个文本串中寻找每一个已给出的模式串的高效算法. 在学习AC自动机之前,你需要先学习Trie树和KMP算法,因为AC自动机正式利用并结合了两者的思想. 说到实际的不同,其实AC自动机只是在Trie树上引入了一个类似KMP中next数组的东西叫做Fail指针. 对于每一个节点,Fail指针指向该节点所代表的字符串中,次长的.在Trie树中存在的后缀(因为最长的在Trie树种存在的后缀就是其本身)所代表的节点. 举例: