• AC日记——琪露诺 洛谷 P1725


    琪露诺

    思路:

      单调队列+dp;

      然而劳资不会单调队列,所以,线段树水过;

    来,上代码:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define maxn 200005
    
    struct TreeNodeType {
        int l,r,dis,mid;
    };
    struct TreeNodeType tree[maxn<<2];
    
    int n,lit,rit,ai[maxn];
    
    inline void in(int &now)
    {
        int if_z=1;now=0;
        char Cget=getchar();
        while(Cget>'9'||Cget<'0')
        {
            if(Cget=='-') if_z=-1;
            Cget=getchar();
        }
        while(Cget>='0'&&Cget<='9')
        {
            now=now*10+Cget-'0';
            Cget=getchar();
        }
        now*=if_z;
    }
    
    inline void tree_build(int now,int l,int r)
    {
        tree[now].l=l,tree[now].r=r;
        if(l==r)
        {
            in(tree[now].dis);
            return ;
        }
        tree[now].mid=l+r>>1;
        tree_build(now<<1,l,tree[now].mid);
        tree_build(now<<1|1,tree[now].mid+1,r);
        tree[now].dis=max(tree[now<<1].dis,tree[now<<1|1].dis);
    }
    
    int tree_query(int now,int l,int r)
    {
        if(tree[now].l==l&&tree[now].r==r) return tree[now].dis;
        if(l>tree[now].mid) return tree_query(now<<1|1,l,r);
        else if(r<=tree[now].mid) return tree_query(now<<1,l,r);
        else return max(tree_query(now<<1,l,tree[now].mid),tree_query(now<<1|1,tree[now].mid+1,r));
    }
    
    void tree_add(int now,int to,int x)
    {
        if(tree[now].l==tree[now].r)
        {
            tree[now].dis+=x;
            return ;
        }
        if(to<=tree[now].mid) tree_add(now<<1,to,x);
        else tree_add(now<<1|1,to,x);
        tree[now].dis=max(tree[now<<1].dis,tree[now<<1|1].dis);
    }
    
    int main()
    {
        in(n),in(lit),in(rit);
        tree_build(1,0,n);
        for(int i=lit+1;i<=n;i++)
        {
            int l=i-rit,r=i-lit;
            if(r>=lit) tree_add(1,i,tree_query(1,max(l,lit),r));
        }
        cout<<tree_query(1,max(n-rit+1,lit),n);
        return 0;
    }
  • 相关阅读:
    【从零开始】【Java】【3】改造成多模块项目
    atomic nonatomic区别
    UIBezierPath
    全局块、栈块、堆块
    动态修改可变数组元素
    layoutSubviews
    约束Constraints
    Objective-C实现一个简单的栈
    NSString 使用 copy、strong
    ARC中__weak;__strong;__unsafe_unretained;修饰词
  • 原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/6735468.html
Copyright © 2020-2023  润新知