【NOIP2013模拟联考5】军训

ADS交叉耦合振荡器VCO仿真 本文主要参考视频中如何使用进行ADS交叉耦合振荡器仿真和分析,由于视频中有诸多错误和视频清晰度较低,虽然视频博主及时改正,为了节省学习时间,可以直接参考本文。 阅读详情

题目

HYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1…n,每个学生都必须参加军训。在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值Hi。学校为了保证军训时教官不会因为学生们都是人生赢家或者是太欠扁而发生打架事故,所以要把学生们分班,并做出了如下要求:
1.分班必须按照学号顺序来,即不能在一个班上出现学号不连续的情况。
2.每个学生必须要被分到某个班上。
3.每个班的欠扁值定义为该班中欠扁值最高的那名同学的欠扁值。所有班的欠扁值之和不得超过Limit。
4.每个班的女友指数定义为该班中所有同学的女友数量之和。在满足条件1、2、3 的情况下,分班应使得女友指数最高的那个班的女友指数最小。
请你帮HYSBZ 的教务处完成分班工作,并输出女友指数最高的班级的女友指数。
输入数据保证题目有解。

分析

要求最小的最大值,
很容易让我们想到想到二分。
那么二分ans,
定义fi表示,前i个人都分好班了,最小的欠扁值H为多少。
显然,如果fn<=limit,那么二分出来的ans是满足分班条件的。
那么怎么转移呢?,fi=min(fj+max(Hj+1,Hj+1,Hj+3......Hi))
但这样是O(N2)的,会超时,
那么我们就要像如何优化dp。
用个线段树来记录这个区间的

最大的h值mxh
最小的h值mnh
最小的f值mnf
还有答案mn,显然mn=mnf+mxh(方便而已)

接着随便搞搞就可以了。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
using namespace std;
int f[25000],sum[27000],g[27000],h[27000],limit,n,m,ans;
int mxh[100000],mnh[100000],mnf[100000],mn[100000],lazy[100000];
int spread(int x,int y)
{
    if(!lazy[x])
        return 0;
    lazy[y]=max(lazy[y],lazy[x]);
    mxh[y]=max(lazy[x],mxh[y]);
    mnh[y]=mxh[y];
    mn[y]=mnf[y]+mxh[y];
}
int deeply(int v,int l,int r,int z)
{
    if(mxh[v]<z)
    {
        mxh[v]=mnh[v]=z;
        mn[v]=mnf[v]+z;
        lazy[v]=z;
        return 0;
    }
    if(l==r)
        return 0;
    spread(v,v*2);
    spread(v,v*2+1);
    lazy[v]=0;
    int mid=(l+r)/2;
    if(mnh[v*2]<z)
        deeply(v*2,l,mid,z);
    if(mnh[v*2+1]<z)
        deeply(v*2+1,mid+1,r,z);
    mn[v]=min(mn[v*2],mn[v*2+1]);
    mnf[v]=min(mnf[v*2],mnf[v*2+1]);
    mnh[v]=min(mnh[v*2],mnh[v*2+1]);
    mxh[v]=max(mxh[v*2],mxh[v*2+1]);
}
int change(int v,int l,int r,int x,int y,int z)
{
    if(l==x && y==r)
    {
        deeply(v,l,r,z);
        return 0;
    }
    spread(v,v*2);
    spread(v,v*2+1);
    lazy[v]=0;
    int mid=(l+r)/2;
    if(y<=mid)
        change(v*2,l,mid,x,y,z);
            else
                if(x>mid)
                    change(v*2+1,mid+1,r,x,y,z);
                        else 
                            change(v*2,l,mid,x,mid,z),change(v*2+1,mid+1,r,mid+1,y,z);
    mn[v]=min(mn[v*2],mn[v*2+1]);
    mnf[v]=min(mnf[v*2],mnf[v*2+1]);
    mnh[v]=min(mnh[v*2],mnh[v*2+1]);
    mxh[v]=max(mxh[v*2],mxh[v*2+1]);
}
int put(int v,int l,int r,int x,int z)
{
    if(l==r)
    {
        mxh[v]=mnh[v]=h[l];
        mnf[v]=z;
        mn[v]=mnf[v]+mxh[v];
        return 0;
    }
    spread(v,v*2);
    spread(v,v*2+1);
    lazy[v]=0;
    int mid=(l+r)/2;
    if(x<=mid)
        put(v*2,l,mid,x,z);
            else
                put(v*2+1,mid+1,r,x,z);
    mn[v]=min(mn[v*2],mn[v*2+1]);
    mnf[v]=min(mnf[v*2],mnf[v*2+1]);
    mnh[v]=min(mnh[v*2],mnh[v*2+1]);
    mxh[v]=max(mxh[v*2],mxh[v*2+1]);
}
int find(int v,int l,int r,int x,int y,int p)
{
    if(l==x && y==r)
    {
        f[p]=min(f[p],mn[v]);
        return 0;
    }
    spread(v,v*2);
    spread(v,v*2+1);
    lazy[v]=0;
    int mid=(l+r)/2;
    if(y<=mid)
        find(v*2,l,mid,x,y,p);
            else
                if(x>mid)
                    find(v*2+1,mid+1,r,x,y,p);
                        else 
                            find(v*2,l,mid,x,mid,p),find(v*2+1,mid+1,r,mid+1,y,p);
}
bool ok(int gg)
{
    memset(mxh,0,sizeof(mxh));
    memset(mnh,0,sizeof(mnh));
    memset(mnf,0,sizeof(mnf));
    memset(mn,0,sizeof(mn));
    memset(lazy,0,sizeof(lazy));
    f[0]=0;
    int j=1,ans;
    for(int i=1;i<=n;i++)
    {
        while(sum[i]-sum[j-1]>gg)
            j++;
        put(1,1,n,i,f[i-1]);
        change(1,1,n,j,i,h[i]);
        f[i]=maxlongint;
        find(1,1,n,j,i,i);
    }
    if(f[n]<=limit)
        return true;
            return false;
}
int rf()
{
    int l=1,r=sum[n];
    while(l<r)
    {
        int mid=(l+r)/2;
        if(ok(mid))
            r=mid;
                else 
                    l=mid+1;
    }
    printf("%d",l);
}
int main()
{
    scanf("%d%d",&n,&limit);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&h[i],&g[i]);
        sum[i]=sum[i-1]+g[i];
    }
    rf();
}
[PCIE5.0] 2.2.8.3 Error Signaling Messages 错误信号消息用于在 PCI Express 设备之间传递错误信息,帮助系统发现并报告错误。每当发生某种错误时,检测到该错误的设备会通过发送这些消息来通知系统。• 没有数据负载:这些错误信号消息不包含任何数据(即 TLP Type 是 Msg),它们仅用于错误报告。• 长度字段保留:在这些消息中,长度字段是保留的,不使用。• 功能号(Function Number)字段:这个字段标识哪个设备发生了错误。 阅读详情

相关推荐

SAP Business One自定义表与字段实战:从零构建企业专属数据模型

本文详细介绍了如何在SAP Business One中创建自定义表与字段,从零构建企业专属数据模型。通过实战案例和避坑指南,帮助用户掌握业务适配、流程优化和权限隔离等关键技巧,提升系统灵活性和数据管理效率。特别适合需要扩展标准功能的SAP Business One用户。

weixin_28730927的博客 362

【NOIP2013模拟联考5】军训(training) 题解

原题DescriptionHYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1…n,每个学生都必须参加军训。在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值Hi。学校为了保证军训时教官不会因为学生们都是人生赢家或者是太欠扁而发生打架事故,所以要把学生们分班,并做出了如下要求:1.分班必须按照学号顺序来,即不能在一个班上出现学号不连续的情况。2.每个学生必须

lijf2001的博客 1521

PostgreSQL+Citus分布式集群实战:从零搭建到性能调优

本文详细介绍了如何从零开始搭建并优化PostgreSQL+Citus分布式数据库集群。内容涵盖集群规划、源码编译安装、Citus扩展部署、节点配置、分布式表创建以及核心性能调优策略,为应对海量数据增长提供了完整的部署指南和实战解决方案。

oo7890的博客 627

JZOJ3456. 【NOIP2013模拟联考3】恭介的法则(rule)(2017.8B组)

https://jzoj.net/senior/#main/show/3456 想法: 要求找满足1/x+1/y=1/n!的对数(x,y) 即要求(x+y)/(x*y)=1/n!的对数 xy/(x+y)=n! xy=n!(x+y) 考虑通过x求y xy=n!x+n!y -n!x=n!y-xy n!x=xy-n!y n!x=(x-n!)y n!x/(x-n!)=y 都要为正整数

puppywolf的博客 360

智能车竞赛飞檐走壁组赛道制作全攻略:从电磁线铺设到立体元素搭建

本文提供了智能车竞赛飞檐走壁组赛道制作的完整指南。从电磁线选材、电流控制与精准铺设等基础入手,详细解析了垂直墙面、圆筒、跷跷板等核心立体元素的构建技巧与过渡处理。重点分享了确保赛道稳定、符合规则且便于调试的实战经验,帮助参赛队伍搭建可靠的立体赛道,为车模算法调试奠定坚实基础。

weixin_29292535的博客 1276

诠视MR眼镜Unity开发设置_Unity2020.3.38

请按照如下设置Android SDK 和 Gradle。打包前先将Unity切换到Android模式。Preferences 设置。

m0_71932574的博客 602

【NOIP2013模拟联考5】军训(training) 题解+代码

DescriptionHYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1…n,每个学生都必须参加军训。在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值Hi。学校为了保证军训时教官不会因为学生们都是人生赢家或者是太欠扁而发生打架事故,所以要把学生们分班,并做出了如下要求: 1.分班必须按照学号顺序来,即不能在一个班上出现学号不连续的情况。 2.每个学生

Jacky35 1343

【滚雪球学数学建模】第4.1节·概率与统计建模,一文搞懂!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1348

【JZOJ3463】【NOIP2013模拟联考5】军训(training)(单调栈+二分+DP+线段树优化)

Problem HYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1…n,每个学生都必须参加军训。在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值Hi。学校为了保证军训时教官不会因为学生们都是人生赢家或者是太欠扁而发生打架事故,所以要把学生们分班,并做出了如下要求: 1.分班必须按照学号顺序来,即不能在一个班上出现学号不连续的情况。 2.每个学生必...

qq_36551189的博客 619

redhawk:avgTW maxTW minTW minWC的区别

分析dynamic ir drop报告时会遇到这几个值,avgTW maxTW minTW minWC,如下图。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 693

北斗导航:提高RTK定位精度的GIS应用

其中,RTK(Real-Time Kinematic)定位技术是一种实时差分定位技术,通过利用基准站的观测数据来对移动站的测量值进行差分处理,以提高定位精度。差分处理的关键是基准站的观测数据,基准站通过全球定位系统(如北斗导航系统)获取卫星信号并记录观测数据。通过使用RTK定位技术,结合北斗导航系统的观测数据和差分处理,可以实现高精度的定位结果。我们将介绍RTK定位的原理、使用北斗导航系统进行RTK定位的步骤,以及如何将定位结果与GIS数据进行集成和可视化展示。步骤1:设置基准站和移动站。

OvzStream的博客 476

JZOJ 3463. 【NOIP2013模拟联考5】军训(training)

目录: 题目: 分析: 代码: 题目: 单击查看题目 分析: 题目是求最大值最小,所以应该二分。 如何判断当前的mid值是否合法呢? 这里用DP实现。 设fifif_i表示i之前已经分好班的时候的最小欠扁值。 转移显然: fi=∑min{fj+max{hj+1,hj+2...hi}}fi=∑min{fj+max{hj+1,hj+2...hi}...

qq_35786326的博客 366

【超详细】MIT 液态神经网络(LNNs)——深度学习新动向

输入可以是任何形式的时间序列数据,其中表示时间。例如传感器读数、金融市场数据、语音信号等。

allein_STR的博客 2611

【NOIP2013模拟联考5】军训(training)

Description HYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1…n,每个学生都必须参加军训。在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值Hi。学校为了保证军训时教官不会因为学生们都是人生赢家或者是太欠扁而发生打架事故,所以要把学生们分班,并做出了如下要求: 1.分班必须按照学号顺序来,即不...

angw337679452的博客 137

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

NOIP2013模拟联考5】军训(training)

DescriptionHYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1…n,每个学生都必须参加军训。在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值Hi。学校为了保证军训时教官不会因为学生们都是人生赢家或者是太欠扁而发生打架事故,所以要把学生们分班,并做出了如下要求:1.分班必须按照学号顺序来,即不能在一个班上出现学号不连续的情况。2.每个学生必须要被

HownoneHe的博客 742

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【JZOJ B组】【NOIP2013模拟联考5】军训(training)

Description HYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1…n,每个学生都必须参加军训。在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值Hi。学校为了保证军训时教官不会因为学生们都是人生赢家或者是太欠扁而发生打架事故,所以要把学生们分班,并做出了如下要求: 1.分班必须按照学号顺序来,即不能在一个班上出现学号不连续的情况。 2.每...

Brute♂force 403

JZOJ 2018.07.19【2018提高组】模拟C组

目录: 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela) 3462. 【NOIP2013模拟联考5】休息(rest) 3463. 【NOIP2013模拟联考5】军训(training) 3464. 【NOIP2013模拟联考6】秀姿势(sugata) 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela) Description “有了...

qq_35786326的博客 431

【NOIP2013模拟联考5】休息(rest) 题解(结论,逆序对)

Description 休息的时候,可以放松放松浑身的肌肉,打扫打扫卫生,感觉很舒服。在某一天,某LMZ 开始整理他那书架。已知他的书有nnn本,从左到右按顺序排列。他想把书从矮到高排好序,而每一本书都有一个独一无二的高度HiH_iHi​。他排序的方法是:每一次将所有的书划分为尽量少的连续部分,使得每一部分的书的高度都是单调下降,然后将其中所有不少于222本书的区间全部翻转。重复执行以上操作,最后使得书的高度全部单调上升。可是毕竟是休息时间,LMZ 不想花太多时间在给书排序这种事上面。因此他划分并翻转完第一

CJZ的博客 278

2018暑假集训——待做且可尝试去做的题

jzoj3387. 【NOIP2013模拟】终极武器 jzoj3336. 【NOI2013模拟】坑带的树 jzoj3304. Theres...

weixin_30344995的博客 205

7,8月纪中集训未完成题目

7.12 T3最长公共子串 7.13 T1只有70pts 消息传递 T4 只有50pts 公路维护 7.14 T4我图呢 7.15 T2 Reflect Damage T4 凡喵识图 …

ssllyr 250

2015-08 省赛模拟训练总结

说在前面这个月我们提早回来学校训练,这种安排早已习惯了。每到这个时候,我的收获会是一年中最大的。这一次我做的是省赛组的题,从中我不仅学到许多,而且看出了自己的许多问题。暴露的问题我在做比赛时的问题,可以大致归为几点: 时间分配问题:省赛题目的难度是普遍较高的,这时合理分配时间很重要,很重要,很重要。但是我有的时候会在一些题目上花太多时间。有的题可能看似简单,或者让我想到疑似正解的方法,于是花了较多的

WorldWide_D的博客 2371
上一篇: 匈牙利算法
下一篇: 【NOIP2013模拟联考6】选课
无尽的蓝黄
博客等级 码龄11年 30粉丝 219原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值