借教室

借教室

https://ac.nowcoder.com/acm/problem/16564

//借教室
//二分订单数
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int n;

int r[1000005];//存每天最多借的教室数量
int d[1000005];//存教室数差分

struct ding
{
    int begins,ends;//开始天数,结束天数
    int ding;//借教室数量
}t[1000005];

bool pd(int mid)
{
//    cout<<"mid "<<mid<<endl;
    memset(d,0,sizeof(d));
    int sum=0;
    for(int i=1;i<=mid;i++)
    {
        d[t[i].begins]+=t[i].ding;
        d[t[i].ends+1]-=t[i].ding;
    }
    for(int i=1;i<=n;i++)
    {
        sum+=d[i];//求前缀和,若某天教室不足,则返回false
        if(sum>r[i])  return false;
    }
    return true;//若全部满足,第mid个订单则满足
}
int main()
{
    int m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)   cin>>r[i];

    for(int i=1;i<=m;i++)
    cin>>t[i].ding>>t[i].begins>>t[i].ends;

    int l=1 ,r=m;//二分答案,
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(pd(mid)) l=mid+1;
        else r=mid-1;
    }
    if(l==m+1)    cout<<"0"<<endl;//注意输出边界,最好自己举例子验证
    else cout<<"-1"<<endl<<l<<endl;
}
全部评论
大佬,能问一下bool函数中第一个for循环是干啥的么,谢谢
点赞 回复 分享
发布于 2023-01-28 14:10 吉林

相关推荐

04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务