zoukankan      html  css  js  c++  java
  • 【bzoj2600】[Ioi2011]ricehub 双指针法

    题目描述

    给出数轴上坐标从小到大的 $R$ 个点,坐标范围在 $1sim L$ 之间。选出一段连续的点,满足:存在一个点,使得所有选出的点到其距离和不超过 $B$ 。求最多能够选出多少点。

    $Rle 10^5,Lle 10^9,Ble 2 imes 10^{15}$

    输入

    第一行 三个整数 R L B
    接下来R行 每行一个整数 表示X[i]

    输出

    一个整数 最多稻米数

    样例输入

    5 20 6
    1
    2
    10
    12
    14

    样例输出

    3


    题解

    双指针法

    傻题,显然对于一段连续的点,使得距离和最小的点是它们的中位数。

    于是使用双指针法,用前缀和求距离和即可。

    时间复杂度 $O(n)$ 

    #include <cstdio>
    typedef long long ll;
    ll a[100010] , sum[100010];
    int main()
    {
        int n , i , mid , p = 1 , ans = 0;
        ll m , k;
        scanf("%d%lld%lld" , &n , &m , &k);
        for(i = 1 ; i <= n ; i ++ ) scanf("%lld" , &a[i]) , sum[i] = sum[i - 1] + a[i];
        for(i = 1 ; i <= n ; i ++ )
        {
            while(p <= n && (mid = (p + i) >> 1 , sum[p] - sum[mid] - a[mid] * (p - mid)) + (a[mid] * (mid - i + 1) - sum[mid] + sum[i - 1]) <= k) p ++ ;
            if(ans < p - i) ans = p - i;
        }
        printf("%d
    " , ans);
        return 0;
    }
    

     

  • 相关阅读:
    oracle,mysql对敏感,关键字等处理
    eclipse内置tomcat启动方法
    plsql登录弹白框
    date
    linux乱码
    环境变量
    终端类型
    netstat -aon|findstr 8888 终止进程
    export
    bash环境变量读取顺序
  • 原文地址:https://www.cnblogs.com/GXZlegend/p/8315216.html
Copyright © 2011-2022 走看看