首页 > 其他分享 >Codeforces Round #702 (Div. 3) G

Codeforces Round #702 (Div. 3) G

时间:2022-11-09 17:48:35浏览次数:47  
标签:int mid 702 Codeforces 单调 轮数 Div lun

G. Old Floppy Drive

维护一个前缀和
再维护一个单调的前缀和 因为我们后面的数花费更大 只有贡献更大的时候才会有用
这样就好做了 对于每个查询我们知道他最少的轮数肯定时单调的减去最后一个数/一轮的值上取整
但是前面会有数比他花费少一点 记住我们前面是具有单调性的 我们直接二分出这个数
然后直接计算答案即可
还有一种情况就是一轮的值lun是<=0的 这个时候我们直接对着这个单调的序列二分即可 不行就-1
最后注意这里x>=v.back()的时候我们才去二分这个最少的轮数对应最小的下标
不然我们这里轮数会变成负数 还会算出负数的轮数就可以得到
最后就是输出的时候都要-1

void solve(){
    int n,m;cin>>n>>m;
    vector<int>s(n+10);
    vector<int>v,pos;
    int lun=0;
    for(int i=1;i<=n;i++)cin>>s[i],lun+=s[i],s[i]+=s[i-1];
    for(int i=1;i<=n;i++){
        if(v.empty())v.push_back(s[i]),pos.push_back(i);
        else if(v.back()<s[i])v.push_back(s[i]),pos.push_back(i);
    }
    for(int i=1;i<=m;i++){
        int x;cin>>x;
        if(lun<=0){
            auto it=lower_bound(all(v),x);
            if(it==v.end())cout<<-1<<' ';
            else cout<<pos[it-v.begin()]-1<<' ';
            continue;
        }
        int l=0,r=(int)v.size()-1;
        int now=up(x-v.back(),lun);
        if(x>=v.back()) {
            while (l < r) {
                int mid = l + r >> 1;
                if (up(x - v[mid], lun) == now)r = mid;
                else l = mid + 1;
            }
            cout << up(x - v[l], lun) * n + pos[l] - 1 << ' ';
        }else{
            auto it=lower_bound(all(v),x);
            cout<<pos[it-v.begin()]-1<<' ';
        }
    }
    cout<<endl;
}

标签:int,mid,702,Codeforces,单调,轮数,Div,lun
From: https://www.cnblogs.com/ycllz/p/16874581.html

相关文章

  • Codeforces Round #704 (Div. 2) D
    D.Genius'sGambit构造要是a>=k的构造很好想出来但是a+b-1>k&&k>a时其实也可以构造出来我们考虑让中间的一些1经过减法变成0然后到高位时再与低位的1相减例如:1111......
  • Codeforces Global Round 16 F | CF1566F Points Movement
    https://www.luogu.com.cn/problem/CF1566Fhttps://codeforces.com/contest/1566/problem/F这类有关线段的问题我通常都是先观察线段的包含/交对线段是否保留的影响,以约......
  • 指定div滚到到指定位置
    获取页面某一元素的绝对X,Y坐标varX=$('#ElementID').offset().top;varY=$('#ElementID').offset().left;获取相对(父元素)位置:varX=$('#ElementID').position(......
  • Codeforces Round #740 (Div. 1, based on VK Cup 2021 - Final (Engine)) B
    B.UptheStrip考虑dpdp[i]表示当前i位置的cnt考虑转移我们对于第一个操作显然只用维护一个后缀和即可dp[i]+=s[i+1]对于第二个操作也很简单我们知道i的值z除一......
  • Codeforces Round #715 (Div. 1) A
    A.BinaryLiterature我们观察发现就是找两个串要是最长公共子序列大于等于n的我们就一定可以构造出一个出来但是传统的最长公共子序列是n2的我们考虑一些特殊的性质......
  • 702001 TXT 22G101-2图集的简介
    22G101-2图集的全称:混凝土结构施工图平面整体表示方法制图规则和构造详图(现浇混凝土板式楼梯)本图集制图规则适用于现浇混凝土板式楼梯。......
  • JavaScript实现滚动条滚动给div加颜色
    实现原理当滚动的距离大于某一个元素到页面顶部的距离时候,给元素设置实现步骤1.获取某一个元素到页面顶部的距离2.如果距离大于零则给div加上颜色,如果等于0,即归位的时......
  • 为什么我们必须使用div?
    那么,为什么我们必须使用div?如果您查看Mozilla的html5元素列表,则每个元素都有语义,然后我们进入<div>并显示:“表示没有特殊含义的通用容器。......
  • codeforces 1750_D
    https://codeforces.com/contest/1750/problem/D#include<iostream>#include<vector>#include<cmath>#include<map>#include<unordered_map>#include<unordered_set>......
  • Codeforces试题乱做 Part9
    他挥毫泼墨落笔她舞袖梦里佳期戏中情戏中意陌路人相逢在花天锦地\(\text{[CF1736E]SwapandTake}\)\(\color{green}{\text{[EASY]}}\)我们考虑最终最优的答案中......