首页 > 其他分享 >Codeforces Round #826 (Div. 3) F

Codeforces Round #826 (Div. 3) F

时间:2022-11-29 01:55:05浏览次数:44  
标签:sort r1 r2 int Codeforces c2 Div 826 c1

F. Multi-Colored Segments

洛谷最优解

显然我们对于每一个线段可以分成左右两端考虑
我们先按照l sort一遍
然后每次计算与他最近的值
我们维护两个最大的r即可
然后每次更新
然后我们再倒着做一遍
对于每一个r 找到最近的l
然后每次更新l
我们l要记录次大和最大 因为颜色只有相同和不同两种
最后输出答案的时候取min即可
其实这里的证明并不明朗
本来我是想反着的时候还应该sort一遍的
但是比不sort更错了
我就直接交了个不sort的 居然过了 还跑的飞快

void solve(){
    int n;cin>>n;
    vector<tuple<int,int,int,int>>v;
    for(int i=1;i<=n;i++){
        int l,r,c;cin>>l>>r>>c;
        v.push_back({l,r,c,i-1});
    }
    sort(all(v));
    int r1=-INF+1,c1=n+1,r2=-INF,c2=n+2;//r1最近 r2次近
    vector<int>a(n),b(n);
    for(int i=0;i<n;i++){
        auto [l,r,c,pos]=v[i];
        if(c1!=c){
            a[pos]=l-r1;
        }else{
            a[pos]=l-r2;
        }
        //gengxin
        if(c==c1||c==c2){
            if(c==c1){
                r1=max(r1,r);
            }else{
                r2=max(r2,r);
            }
            if(r2>r1){
                swap(r1,r2);
                swap(c1,c2);
            }
        }else{
            if(r>r2){
                r2=r;
                c2=c;
            }
            if(r2>r1){
                swap(r1,r2);
                swap(c1,c2);
            }
        }
    }
    int l1=INF,l2=INF+1;
    c1=n+1,c2=n+2;
    //sort(all(v),cmp);
    for(int i=n-1;i>=0;i--){
        auto [l,r,c,pos]=v[i];
        if(c1!=c){
            b[pos]=l1-r;
        }else{
            b[pos]=l2-r;
        }
        if(c==c1||c==c2){
            if(c==c1){
                l1=min(l1,l);
            }else{
                l2=min(l2,l);
            }
            if(l2<l1){
                swap(l1,l2);
                swap(c1,c2);
            }
        }else{
            if(l<l2){
                l2=l;
                c2=c;
            }
            if(l2<l1){
                swap(l1,l2);
                swap(c1,c2);
            }
        }
    }
    for(int i=0;i<n;i++)cout<<max(0ll,min(a[i],b[i]))<<' ';cout<<endl;
}

标签:sort,r1,r2,int,Codeforces,c2,Div,826,c1
From: https://www.cnblogs.com/ycllz/p/16934302.html

相关文章

  • 除法(Division)
    ​​Division​​TimeLimit:3000MS MemoryLimit:Unknown 64bitIOFormat:%lld&%llu​​Submit ​​​​Status​​Description​​​​Writeaprogramthat......
  • 「题解」Codeforces 1765L Project Manager
    写了两个小时写吐了,你告诉我这玩意2400?如果不管假期的话,那么每一周必然会有一个项目跟进一次进度。那么答案就是线性的。即使有假期的存在也没关系,每个假期顶多就只会拖......
  • Codeforces Global Round 24(持续更新)
    Preface最近可能中了降智病毒,写什么都写不过下午打的校趣味赛看错题一个爆搜WA了四次,少罚一次时都Rank1了然后晚上CF先是C想半天,然后D作为曾经最擅长的计数题也漏想了一......
  • Codeforces Round #829 (Div. 1) C
    C.WishIKnewHowtoSort我们会发现此题的终点状态只有一个起点状态也只有一个所以我们的状态表示可以非常简单我们可以发现我们为了达到最终的状态我们用一些1来......
  • div垂直水平居中
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>div垂直水平居中</title><style>div{padding:16px32px24px;position:absolute;......
  • Codeforces Round #828 (Div. 3) F
    F.MEXvsMED一开始写了个感觉每个点只会搞一次的那种线性感性理解了很对结果又wa又tintleft=l-z-1,right=n-r;intcnt=2*now;for(intle......
  • Codeforces div2 #836
    B核心思路:这题我们会发现其实n为奇数的时候是非常好处理的。主要是n为偶数。我们不能难发现,奇数其实就是偶数的扩展情况,这里其实主要有点比较难看出123这个的关系,但是我......
  • 『题解』Codeforces 1758B XOR = Average
    Description构造一个\(a\)序列,使\(a_1\oplusa_2\oplusa_3\oplus\cdots\oplusa_n=\dfrac{sum(a)}{n}\)。Solution第一眼看到这道题,我想到的是分情况讨论。......
  • Codeforces Round #739 (Div. 3) F1
    F1.NearestBeautifulNumber(easyversion)很像网络赛北大出的那题感觉这题是简化版我们只需要把所有数都搞出来然后二分即可我们先枚举k1的情况这个很简单先枚......
  • 『题解』Codeforces 808D Array Division
    题目传送门解题思路首先统计\(n\)个数字和为\(sum\),那么一半就是\(sum=sum\div2\)从\(1\)到\(n\)枚举,累计进前缀和\(ans\)中,如果发现第\(i\)个数字累......