Codeforces 1165F2(二分内的check)

要点

  • 二分答案,内部喜闻乐见的拖延策略:对于某个打折玩具,就选最晚的打折时间买,答案并不会变劣,只是购买时间的平移。
  • 注意最晚时间不是预处理的东西,是二分内部的、在mid以内的最晚时间。
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

const int maxn = 2e5 + 5;
int n, m, k[maxn], d[maxn], t[maxn];
int Late[maxn], sum;

bool ok(int mid) {
    for (int i = 1; i <= n; i++) {
        Late[i] = 0;
    }
    vector<int> day[maxn];
    for (int i = 1; i <= m; i++) {
        if (d[i] <= mid)
            Late[t[i]] = max(Late[t[i]], d[i]);
    }
    for (int i = 1; i <= n; i++) {
        if (k[i] && Late[i])
            day[Late[i]].push_back(i);
    }

    int s = sum, cur = 0;
    for (int i = 1; i <= mid; i++) {
        cur++;
        if (i < maxn && day[i].size()) {
            for (int t : day[i]) {
                if (cur >= k[t]) {
                    cur -= k[t];
                    s -= k[t];
                } else {
                    s -= cur;
                    cur = 0;
                    break;
                }
            }
        }
    }
    return cur >= s * 2;
}

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)
        scanf("%d", &k[i]), sum += k[i];
    for (int i = 1; i <= m; i++) {
        scanf("%d%d", &d[i], &t[i]);
    }

    int l = 1, r = 4e5 + 5, ans;
    while (l <= r) {
        int mid = (l + r) >> 1;
        if (ok(mid))    ans = mid, r = mid - 1;
        else    l = mid + 1;
    }
    return !printf("%d\n", ans);
}

原文地址:https://www.cnblogs.com/AlphaWA/p/10928545.html

时间: 2024-08-10 06:17:41

Codeforces 1165F2(二分内的check)的相关文章

安装OMD - The Open Monitoring Distribution (基于check mk的开源版本)

一.什么是OMD OMD的全称是The Open Monitoring Distribution,官方网址是:http://omdistro.org/start 大家可以看看官方的团队介绍: 从左至右Lars Michelsen (NagVis), Wolfgang Barth (author of "Nagios. System- und Netzwerk-Monitoring"), Gerhard Lauer (Nagios - Das Praxisbuch), Mathias K

VC中MFC check box的用法

原文链接:http://blog.sina.com.cn/s/blog_817a5eb601015xtr.html 在界面设计中,我们经常会用到Check Box这个控件,Check Box 的使用方法与Radio Button 的用法相似,但比它要简单得多. 一.设定Check Box为 选中状态 ((CButton*)GetDlgItem(ID号))->SetCheck(TRUE); (SetCheck(FALSE)) 为不选中,如果想初始化为选中状态,则在InitDlg函数中加入下面这段语

通过二维码上传手机文件到服务器

Hello,大家好.这是我的第一篇博客,给大家分享下手机扫码上传图片到服务器实现手机pc同步. 1.自动生成二维码--> 可以去二维码生成工具网站获取api也可以直接用这个:http://qr.topscan.com/api.php?text= ? 注意:问号代表二维码访问的路径如果后面跟www.baidu.com就会跳转百度 2.这里写了个h5页面用于手机扫一扫上传文件跳转 <!DOCTYPE html> <html lang="en"> <hea

Caffe︱构建lmdb数据集与各类文件路径名设置细解

Lmdb生成的过程简述 1.整理并约束尺寸,文件夹.图片放在不同的文件夹之下,注意图片的size需要规约到统一的格式,不然计算均值文件的时候会报错. 2.将内容生成列表放入txt文件中.两个txt文件,train训练文件.val测试文件. Train里面就是你的分类了. 3.形成LMDB数据集. 4.形成训练集的均值文件. 整理并规约.一般情况下整理用数据增强的功能,一般用opencv,这块笔者还没有探究,所以先不说. 一.图片列表生成 图片内容变成列表.这个办法很多,很多软件都可以用,pyth

单例和多线程

要保证在多线程环境下的单例模式,有下面两种建议的方式: 一.静态内部类 public class Singletion { private static class InnerSingletion { private static Singletion single = new Singletion(); } public static Singletion getInstance(){ return InnerSingletion.single; } }  二.double check的方式

Hybrid App - 安全

一.addjavascriptInterface接口引起的漏洞 参考:http://blog.csdn.net/leehong2005/article/details/11808557/ 说明: js 注入方法addJavascriptInterface可能导致不安全,因为JS可能包含恶意代码.通过JavaScript,可以访问当前设备的SD卡上面的任何东西,甚至是联系人信息,短信等. 1,WebView添加了JavaScript对象,并且当前应用具有读写SDCard的权限,也就是:androi

PHP-FPM监控shell

!/bin/bash #监控的网页地址url="http://dev2.jwsmed.com" #fastcgi启动/重启/停止脚本路径PROG=/data/fistsoft/php/sbin/php-fpm #fastcgi重启记录日志文件LOG=/data/services/logs/php_5525/restart.log #返回结果正常记录日志LOG2=/data/services/logs/php_5525/check.log #时间time=`date` #取得http状态

一个关于2的次方问题

问题: 判断一个正整数是否是2的次方(比如16是2的四次方,返回1:不是则返回0).(要求性能尽可能高) 解法一: int check(int number){ int temp = 1; while(temp <= number){ if(temp == number){ return 1; } temp = temp * 2; } return 0; } 思路简单一个一个比较,时间复杂度O(logN) 解法二: int check(int number){ int temp = 1; whi

006.MFC_对话框_复选框_单选钮

对话框和控件复选框单选框分组框示例:三原色画图 一.建立名为Demo2的MFC工程,按照下图添加控件 并修改2个Group Box Caption属性分别为颜色.外观 修改3个Check Box Caption和ID属性分别为(红色,IDC_CHK_RED).(绿色,IDC_CHK_GREEN).(蓝色,IDC_CHK_BLUE) 修改2个Radio Box Caption和ID属性分别为(矩形,IDC_RD_RECT).(圆形,IDC_RD_ROUND) 注意:radio box 必须是连续的