P1083 [NOIP2012 提高组] 借教室

原题链接

题解

1.把天数抽象为数组,下标代表天数,值代表每天能借的教室数
2.订单抽象成区间,每个点覆盖的区间数不超过其值,问第一个无法覆盖的区间是?
3.具有单调性,考虑二分
4.区间覆盖可以用差分线性复杂度求出来

code

#include<bits/stdc++.h>
using namespace std;

struct node
{
    int use,l,r;
}dd[1000005];

int r[1000005];

int n,m;

int sum[1000006]={0};

bool check(int x)
{
    for(int i=1;i<=n;i++) sum[i]=0;
    for(int i=1;i<=x;i++)
    {
        sum[dd[i].l]+=dd[i].use;
        sum[dd[i].r+1]-=dd[i].use;
    }

    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        cnt+=sum[i];
        if(cnt>r[i]) return 1;
    }
    return 0;
}
int main()
{

    cin>>n>>m;

    for(int i=1;i<=n;i++) cin>>r[i];

    for(int i=1;i<=m;i++)
    {
        cin>>dd[i].use>>dd[i].l>>dd[i].r;
    }

    int l=0,r=n+1;

    while(l+1<r)
    {
        int mid=(l+r)/2;

        if(check(mid)) r=mid;
        else l=mid;
    }

    if(r!=n+1)
    {
        puts("-1");
        cout<<r;
    }
    else puts("0");
    return 0;
}

posted @   纯粹的  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示