zoukankan      html  css  js  c++  java
  • LC 1425. Constrained Subset Sum

    link

    using deque:

    class Solution {
    public:
       
        int constrainedSubsetSum(vector<int>& nums, int k) {
            int n=nums.size();
            
            int res=nums[0];
            deque<int> dq;
            for(int i=0;i<n;i++){
                if(dq.size()>0 && dq.front()==i-k-1) dq.pop_front();
                nums[i]+=dq.size()>0?nums[dq.front()]:0;
                res=max(res,nums[i]);
                while(dq.size()>0 && nums[i]>nums[dq.back()]) dq.pop_back();
                if(nums[i]>0) dq.push_back(i);
            }
            return res;
        }
    };

    using segment tree:

    class Solution {
    public:
        int seg[100010<<2];
        
        int constrainedSubsetSum(vector<int>& nums, int k) {
            int n=nums.size();
            int res=nums[0];
            for(int i=0;i<n;i++){
                int tmp=nums[i]+query(1,1,n+1,i-k+1,i);
                res=max(res,tmp);
                if(tmp>0){
                    update(i+1,1,n+1,tmp,1);
                }
            }
            return res;
        }
        
        void update(int uidx, int left, int right, int val, int idx){
            if(left>uidx || right<uidx) return;
            if(left==right) {
                seg[idx]=val;
                return;
            }
            int mid=left+(right-left)/2;
            update(uidx,left,mid,val,idx<<1);
            update(uidx,mid+1,right,val,idx<<1|1);
            seg[idx]=max(seg[idx<<1],seg[idx<<1|1]);
        }
        
        int query(int idx, int left, int right, int qleft, int qright){
            if(qleft>right || qright<left) return 0;
            if(qleft<=left && qright>=right) return seg[idx];
            int mid=left+(right-left)/2;
            int l=query(idx<<1,left,mid,qleft,qright);
            int r=query(idx<<1|1,mid+1,right,qleft,qright);
            return max(l,r);
        }
    };
  • 相关阅读:
    kali更新源
    中国Linux源镜像站大全
    火狐浏览器Firefox上DownThemAll插件
    使用 backdoor 工具注入ShellCode
    动态加载 ShellCode绕过杀软
    渗透测试的本质与沉思
    Payload 实现分离免杀
    XSS跨站攻击靶场-通关笔记
    Web文件上传靶场
    Python 常用外部模块详解
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12780840.html
Copyright © 2011-2022 走看看