DP做法求hack,不知道挂哪了,对拍也对不出来
查看原帖
DP做法求hack,不知道挂哪了,对拍也对不出来
539345
OrinLoong楼主2025/6/18 19:38

代码如下:

#include <bits/stdc++.h>
using namespace std;
namespace obasic{
    typedef long long lolo;
    const int M107=1e9+7;
    template <typename _T>
    void readi(_T &x){
        _T k=1;x=0;char ch=getchar();
        for(;!isdigit(ch);ch=getchar())if(ch=='-')k=-1;
        for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+ch-'0';
        x*=k;return;
    }
    void readis(){};
    template <typename _T, typename... _Ts>
    void readis(_T &x,_Ts &...xs){readi(x),readis(xs...);}
    template <typename _T>
    void writi(_T x){
        if(x<0)putchar('-'),x=-x;
        if(x>9)writi(x/10);
        putchar(x%10+'0');
    }
    template <typename _T>
    void writil(_T x){writi(x),puts("");}
    template <typename _T>
    void writip(_T x){writi(x),putchar(' ');}
    template <typename _T>
    void maxxer(_T &x,_T y){x=max(x,y);}
    template <typename _T>
    void minner(_T &x,_T y){x=min(x,y);}
};
using namespace obasic;
const int MaxN=5e5+5;
int N,X,Y,V,nln;lolo dans,diff;
struct quer{lolo l,r;}Q[MaxN];
bool cmpr(quer a,quer b){return a.r<b.r;}
int main(){
    // freopen("smp1.in","r",stdin);
    // freopen("myans1.out","w",stdout);
    readi(N);
    for(int i=1;i<=N;i++){
        readis(X,Y),maxxer(V,max(X,Y));
        if(X>Y)Q[++nln]={X,Y};
    }
    if(!nln){writi(V);return 0;}
    sort(Q+1,Q+nln+1,cmpr);
    dans=diff=V-Q[1].r,Q[nln+1]={V,V};
    for(int i=1,cmxl=0;i<=nln;i++){
        auto [cl,cr]=Q[i];
        if(cl<=cmxl)continue;
        // printf("i=%d,cl=%d,cr=%d,cmxl=%d\n",i,cl,cr,cmxl);
        diff+=2*(cl-cr)-(Q[i+1].r-cr);
        // printf("diff+=2*%d-%d\n",cl-cr,Q[i+1].r-cr);
        if(cr<=cmxl)diff-=2*(cmxl-cr);
        // printf("diff-=2*(%d-%d)\n",cmxl,cr);
        cmxl=cl,minner(dans,diff);
        // printf("cdiff=%d\n",diff);
    }
    // printf("V=%d,dans=%d\n",V,dans);
    writi(V+dans);
    return 0;
}
2025/6/18 19:38
加载中...