E. Turtle vs. Rabbit Race: Optimal Trainings-Codeforces Round 929 (Div. 3)

E. Turtle vs. Rabbit Race: Optimal Trainings

首先计算前缀和,对于每次询问,二分找到右边界即可。

二分:使用前缀计算区间(l,r)的总和,找到使得总和<=u的最大ansr

ansr需要考虑到,能不能取到ansr的下一位,所以要特殊判断假如取到ansr+1这个情况是否符合条件。

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int T;cin>>T;
    while(T--){
        int n;cin>>n;
        int a[n+2];
        int pre[n+2]={0};
        for(int i=1;i<=n;i++) {cin>>a[i];pre[i]=pre[i-1]+a[i];}
        int q;cin>>q;
        while(q--){
            int l,u;cin>>l>>u;
            int left=l,right=n;
            int ansr=l;
            while(left<=right){
                int mid=(left+right)/2;
                if(pre[mid]-pre[l-1]<=u){
                    ansr=mid;
                    left=mid+1;
                }else{
                    right=mid-1;
                }
            }
            if(abs(pre[ansr+1]-pre[l-1]-u)<=u-(pre[ansr]-pre[l-1])) ansr++;
            cout<<ansr<<" ";
        }
        cout<<endl;
    }
}
相关推荐
Jerry3 小时前
LeetCode 28. 找出字符串中第一个匹配项的下标
算法
Jerry5 小时前
LeetCode 459. 重复的子字符串
算法
哥不想学算法8 小时前
【C++】字符串字面量拼接
开发语言·c++
海石8 小时前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石8 小时前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry10 小时前
LeetCode 151. 反转字符串中的单词
算法
gugucoding10 小时前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
ChaoZiLL12 小时前
我的数据结构3——链表(link list)
数据结构·链表
a11177612 小时前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜12 小时前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai