首页 > 其他分享 >E. Boring Segments

E. Boring Segments

时间:2024-07-28 23:50:27浏览次数:13  
标签:itl Boring Segments seg 端点 区间 itr ll

原题链接

题解

只要求最大值和最小值的差尽量小,也就意味着,权值位于最大值和最小值之间的线段可以任意取

也就是说,我们将线段按权值排序,我们只需要取其中一段区间,然后查看是否覆盖了完整的区间,如果是,判断能否更新最小值

这样看起来是两次for循环找区间,对于查看是否完整覆盖区间的部分,看起来是对区间内每个点+1,然后查看全域最小值

这样看起来是 \(O(n^4)\) 的做法

优化:
对于区间修改,区间查找,我们可以用线段树维护,时间复杂度来到 \(O(n^3 logn)\)

再度优化:我们可以遍历 \(i\) ,查看以 \(i\) 为右端点时,且能覆盖全域的最大左端点 \(l\),由于这样的左端点是递增的,所以我们可以用双指针维护,时间复杂度来到 \(O(nlogn)\)

双指针上楼:我们发现,在遍历 \(i\) 查找以 \(i\) 为左/右端点时,满足条件的 ( 最大/小) 左/右 端点,可以用双指针维护,只要这样的 左/右端点 满足单调性

code

#include<bits/stdc++.h>
#define ll long long
#define lowbit(x) ((x)&(-x))
using namespace std;
const ll inf=1e18;
ll tree[4000006]={0};
struct node
{
    ll l,r,v;
}seg[300005];
bool cmp(node a,node b)
{
    return a.v<b.v;
}

ll lazytag[4000006]={0};

void pushdown(ll node,ll l,ll r)
{
    tree[node]+=lazytag[node];
    if(l!=r)
    {
        lazytag[node*2]+=lazytag[node];
        lazytag[node*2+1]+=lazytag[node];
    }

    lazytag[node]=0;
}

void update(ll node,ll l,ll r,ll x,ll y,ll val)
{
    if(lazytag[node]) pushdown(node,l,r);

    if(l>y||r<x) return ;

    if(l>=x&&r<=y)
    {
        lazytag[node]=val;
        pushdown(node,l,r);
        return;
    }

    ll mid=(l+r)/2;
    update(node*2,l,mid,x,y,val);update(node*2+1,mid+1,r,x,y,val);

    tree[node]=min(tree[node*2],tree[node*2+1]);
}

void solve()
{
    ll n,m;
    cin>>n>>m;

    for(ll i=1;i<=n;i++)
    {
        cin>>seg[i].l>>seg[i].r>>seg[i].v;
    }

    sort(seg+1,seg+1+n,cmp);

    ll itl=1;

    ll ans=inf;
    for(ll itr=1;itr<=n;itr++)
    {
        update(1,1,m-1,seg[itr].l,seg[itr].r-1,1);
        while(itl<=itr&&tree[1]>0)
        {
            update(1,1,m-1,seg[itl].l,seg[itl].r-1,-1);
            itl++;
        }

       // printf("itl:%d  itr:%d\n",itl,itr);
        if(itl!=1) ans=min(ans,seg[itr].v-seg[itl-1].v);
    }
    cout<<ans;
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    ll TT=1;
    //cin>>TT;
    while(TT--) solve();
    return 0;
}

标签:itl,Boring,Segments,seg,端点,区间,itr,ll
From: https://www.cnblogs.com/pure4knowledge/p/18329176

相关文章

  • CF1990F Polygonal Segments 题解
    题目链接:https://codeforces.com/contest/1990/problem/F赛时想到了一个略显抽象的做法,但因为写反了一个判断导致没能过掉。赛后调参卡过,用时\(3.5/8\)秒。为了不丢失这个idea最终还是决定写个题解记录一下。题意简述给定一个数组\(a_{1..n}\),执行以下查询:查询区间\([......
  • E. Tracking Segments
    链接https://codeforces.com/problemset/problem/1843/E题面思路二分加树状数组。关键点在于看出来单点修改和区间查询,然后离线+二分:令l=1(1次操作),r=q(最多q次操作)。二分判断能不能行。以及树状数组的板子要记得。代码#define_CRT_SECURE_NO_WARNINGS#include<iostream>......
  • Boring Day(Round 955)
    #include<bits/stdc++.h>#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdin);freopen......
  • CF 1968 F. Equal XOR Segments (*1800) 思维
    CF1968F.EqualXORSegments(*1800)思维题意:给你一个长度为\(n\)的数组,如何可以把数组分成\(k(k>1)\)组,并且使得每组的异或和相等,那么这个数组就是完美的。现在给你\(q\)组询问,每次给你\(l,r\)。请你判断\(a_l\)到\(a_r\)之间是否是完美的。思路:对于每次询问......
  • WPF Path Data PathGeometry PathFigure Segments BezierSegment,LineSegment,ArcSeg
     BezierSegment//BezierCurveusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documen......
  • Intensity Segments问题
    https://github.com/zongzw/intensity-segmentIntensitySegments问题,是一个动态规划问题,考察的是对数据结构的掌握程度,从各种不同的数据结构中选择适合问题的的那个。问题到代码的转化能力,如何使用计算机语言描述数据动态变化的过程。以上链接中,使用两种语言golang和javas......
  • CF1961E Turtle and Intersected Segments 题解
    题目链接点击打开链接题目解法不是,我这咋不会做/fn边数很多的最小生成树有一个方法是\(boruvka\),但这个处理完全图的比较方便另一个方法是用到一个\(trick\):连出的图中的环,可以删去最长边扫描线是容易想到的,主要是如何把连的边数缩减到合理的范围内考虑扫描线到当前时刻......
  • CF1843E Tracking Segments
    题目链接:https://www.luogu.com.cn/problem/CF1843E思路:题目要求至少第几次修改后满足给定的一个区间是美丽区间.我们发现修改操作是有单调性的,随着修改次数的增加,那么满足的美丽区间数量一定会保持不变或增多.因此我们选择二分答案,二分修改次数.二分答案的check函数就根......
  • WPF Path Geometry PathFigureCollection PathFigure PathFigure.Segments PolyQuadra
    <Windowx:Class="WpfApp118.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......