首页 > 其他分享 >CF1250C Trip to Saint Petersburg

CF1250C Trip to Saint Petersburg

时间:2022-10-20 11:45:56浏览次数:73  
标签:struct rs int CF1250C maxr ls Saint Trip pl

题目传送门

思路

线段树入门题。

不妨固定一个右端点 \(r\),把所有右端点小于 \(r\) 的区间都在 \(1\) 至此区间的左端点处 update 一个 \(p\),然后每次都给区间 \(1\) 至 \(i\) update 一个 \(-k\),最后查询区间 \(\max\) 即可。

代码

//A tree without skin will surely die. 
//A man without face is invincible.
#include<bits/stdc++.h>
using namespace std;
#define int long long
int const N=2e5+10;
struct answ{int first,second,id;};
struct node{int x,y;};
vector<answ>a[N];
vector<int>anss;
struct Segment_Tree{
    #define ls (x<<1)
    #define rs (x<<1|1)
    #define mid ((l+r)>>1)
    int c[N<<2],lazy[N<<2],pl[N<<2];
    inline void build(int x,int l,int r){
        if (l==r){pl[x]=l;return;}
        build(ls,l,mid);build(rs,mid+1,r);
        pl[x]=pl[ls];
    }
    inline void pushdown(int x){
        c[ls]+=lazy[x];c[rs]+=lazy[x];
        lazy[ls]+=lazy[x];lazy[rs]+=lazy[x];
        lazy[x]=0;
    }
    inline void pushup(int x){
        if (c[ls]>c[rs]) c[x]=c[ls],pl[x]=pl[ls];
        else c[x]=c[rs],pl[x]=pl[rs];
    }
    inline void update(int x,int l,int r,int ll,int rr,int v){
        if (l==r){pl[x]=l;}
        if (ll<=l && r<=rr){c[x]+=v,lazy[x]+=v;return;}
        pushdown(x);
        if (ll<=mid) update(ls,l,mid,ll,rr,v);
        if (mid<rr) update(rs,mid+1,r,ll,rr,v);
        pushup(x);
    }
    inline node query(int x,int l,int r,int ll,int rr){
        if (l==r) pl[x]=l;
        if (ll<=l && r<=rr) return {c[x],pl[x]};
        pushdown(x);node res;res.x=res.y=0;
        if (ll<=mid) res=query(ls,l,mid,ll,rr);
        if (mid<rr){
            node qq=query(rs,mid+1,r,ll,rr);
            if (qq.x>res.x) res=qq;
        }
        pushup(x);
        return res;
    }
}T;
signed main(){
    int n,k;cin>>n>>k;int maxr=0;
    for (int i=1;i<=n;++i){
        int l,r,p;cin>>l>>r>>p;
        a[r].push_back({l,p,i});maxr=max(maxr,r);
    }
    T.build(1,1,maxr);
    int ans=0,ansl=0,ansr=0;
    for (int i=1;i<=maxr;++i){
        T.update(1,1,maxr,1,i,-k);
        for (auto j:a[i]) T.update(1,1,maxr,1,j.first,j.second);
        node reply=T.query(1,1,maxr,1,i);
        if (reply.x>ans) ans=reply.x,ansl=reply.y,ansr=i;
    }
    //输出
    return 0;
}

标签:struct,rs,int,CF1250C,maxr,ls,Saint,Trip,pl
From: https://www.cnblogs.com/tx-lcy/p/16809263.html

相关文章

  • VS控件-Toolstrip
    1.工具栏TooIStrip概述Windows窗体中的工具栏控件用于显示一系列菜单选项的位图按钮。这样单击工具栏中的一个按钮,就相当于选择了一个菜单项。工具栏上的按钮通常包含......
  • Almost Triple Deletions(CF1699D)
    AlmostTripleDeletions(CF1699D)考虑DP。设$dp_i$为强制保留这一个数,最多可以剩下几个数。发现:当一个区间$[l,r]$满足$len\equiv0(mod\2)\land区......
  • CF605E Intergalaxy Trips
    linkSolution不是很难,不知道为啥之前没做出来。不难看出我们有如下转移式:\[f_{u}=\sumf_{v}\timesP_{u,v}\times(\prod_{f_t<f_v}(1-P_{u,t}))+1\]那么我们可以发......
  • strip()
    1.处理对象是string字符串2.遍历去除首尾指定字符串str='123abcd321'a=str.strip('123')print(a)打印结果:abcd str='12a3abcd321'a=str.strip(......
  • Stripies POJ-1862
    题目链接思路首先,先将出思路:每次取出较大的数进行合并,最后的结果最小证明:假设一共有\(3\)个数\(a,b,c\)和最后的答案\(w\)将\(a,b,c\)进行排列后答案\(w\)......
  • HTML——stript标签
    script标签双闭合标签用于定义客户端脚本(JavaScript)常见用途是图像处理、表单验证和内容的动态更改。<script>document.getElementById("demo").innerHTML="Hell......
  • spring cloud gateway-filter深入了解(StripPrefix与PrefixPath)
    网关过滤器StripPrefix过滤器作用:去掉部分URL路径 spring:cloud:gateway:routes:-id:bds-lbs-serviceuri:lb://bds-lbs-serv......