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

Codeforces Round #756 (Div. 3) F

时间:2022-10-25 17:33:39浏览次数:49  
标签:return 756 int Codeforces long mid ans const Div

F. ATM and Students

金典对于一个区间我们不能让他+的过程中出现负数
我们ST表处理前缀和区间最小数
然后再二分长度 暴力枚举左右端点
时间复杂度是O(nlogn)
哦 还要注意的是
我们二分一个数时 如果会有不合法的解
我们应该扩大一下左右边界 然后再加判断

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int f[N][31],n,a[N],s[N],x,ans_l,ans_r;
void init(){
    for(int len=0;len<30;len++){
        for(int i=1;i+(1<<len)-1<=n;i++){
            if(!len)f[i][len]=s[i];
            else f[i][len]=min(f[i][len-1],f[i+(1<<(len-1))][len-1]);
        }   //i+1<<len-1的话是包括了i 不用加1
    }
}
int query(int l,int r){
    int len=r-l+1;
    int k=log(len)/log(2);
    return min(f[l][k],f[r-(1<<k)+1][k]); //而r-1<<k是没有包含到r所以要+1
}
bool check(int len){
    for(int i=1,j=i+len-1;j<=n;i++,j++){
        if(query(i,j)-s[i-1]+x>=0){
            ans_l=i,ans_r=j;
            return true;
        }
    }
    return false;
}
void solve() {
    cin>>n>>x;
    for(int i=1;i<=n;i++)cin>>a[i],s[i]=s[i-1]+a[i];
    init();
    int l=1,r=n;
    ans_l=ans_r=0;
    while(l<r){
        int mid=l+r+1>>1;
        if(check(mid))l=mid;
        else r=mid-1;
    }
    if(ans_r)cout<<ans_l<<' '<<ans_r<<endl;
    else cout<<-1<<endl;
}
signed main(){
    fast
    int t;t=1;cin>>t;
    while(t--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:return,756,int,Codeforces,long,mid,ans,const,Div
From: https://www.cnblogs.com/ycllz/p/16825646.html

相关文章

  • D. Factorial Divisibility
    D.FactorialDivisibilitytimelimitpertest2secondsmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputYouaregivenan......
  • jquery实现div可移动窗口、拖动改变窗口大小、最大化\还原、窗口置顶
    图例1、拖动标题来移动窗口(红框方案):其他样式,如:     2、最大化:  点击后最大化按钮变成还原按钮,可以还原窗口。  3、关闭  4、拖动改变窗......
  • CF838B Diverging Directions
    题目链接:​​传送门​​分析一下他给的这个图就知道一个祖先到它的儿子只有生成树的边可以走而一个儿子走到祖先有两种方法一个是先直接到1,再从1走到那个祖先还有一个很......
  • Educational Codeforces Round 138 (Rated for Div. 2)练习笔记
    \(\text{A.CowardlyRooks}\)有一张\(n\timesn(n\leq8)\)的国际象棋棋盘,上面放了\(m(m\leq8)\)个城堡(能攻击在同一直线的棋子),第\(i\)个城堡位于\((x_i,y_i)\)......
  • div背景设置
       border:先给div设置一个边框容易观察出大小background:给div插入背景图片用url(),当图片小,会默认把div铺满 (如图),设置no-repeat后则只有一张图片,不会自动铺满。然后......
  • Codeforces Round #829-1754A+B与1753A+B+C 题解
    1754A-TechnicalSupport题意给定一个只包含大写字母\(\texttt{Q}\)和\(\texttt{A}\)的字符串,如果字符串里的每一个\(\texttt{Q}\)都能与在其之后的\(\texttt{A......
  • div
      div定义:就是一个容器,可以整块移动1.创建一个div标签 2.对div标签进行格式设置 3.margin(边缘):先上下(xxpx)差不多300px居中;再左右 (xxpx)(auto=文本中的cent......
  • Codeforces 1674 E. Breaking the Wall
    题意给n个数的数列a[n],可以进行任意次操作,每次选取一个位置i,a[i]-=2,a[i-1]-=1,a[i+1]-=1,问最少几次操作可以让任意两个值<=0提示需要进行分类讨论,分成三种情况讨论1.......
  • Codeforces Round #829 (Div. 2)(持续更新)
    Preface难得有下午的CF,而且是连着两场!但是可惜第二场要去做四级模拟打不了了有点可惜(妈的听力错9个属实逆天)这场是手速场,但对于我这种纯老年人来说WA两发加上写的慢还是......
  • Codeforces Round #401 (Div. 2) 题解 (待续)
    AShellGame#include<bits/stdc++.h>usingnamespacestd;#define#define#define#define#define#define#define#define#define#define#define#define#define#define#define......