题解 | #【入门班】借教室#

【入门班】借教室

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

#include<vector>
#include<string.h>
using namespace std;
const int N = 1e6+10;
int room[N];
int d[N];
int s[N];
int t[N];
int diff[N];
int n,m;
bool check(int x)
{    
    for(int i=1;i<=n;i++)
    {
        diff[i]  = room[i]-room[i-1];
    }
    for(int i=1;i<=x;i++)//订单
    {
        diff[s[i]]-=d[i];
        diff[t[i]+1]+=d[i];
    }
    for(int i=1;i<=n;i++)
    {
        diff[i] +=diff[i-1];
        if(diff[i]<0)
            return false;
    }
        
    return true;
}

int main()
{
    vector<int> temp;
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>room[i];
    }
    
    for(int i=1;i<=m;i++)
    {
        cin>>d[i]>>s[i]>>t[i];
    }
    int l = 1,r = m;
    int ans = 0;
    while(l<=r)
    {
        int mid = l - (l-r)/2;
        if(check(mid))
            l = mid+1;
        else
        {
            ans = mid;
            r = mid-1;
        }
    }
    cout<<ans;
}

此题思路较简单,难在复杂度上 利用二分查找来定位到第一个不合理的订单比从前往后遍历找更快 利用差分数组来将需要遍历处理的操作化为两行代码,降低复杂度

全部评论

相关推荐

07-24 12:30
湘潭大学 营销
点赞 评论 收藏
分享
DKS233:(1)专业技能:Java8也太旧了,最少也要了解到JDK17吧,可以参考现在SpringBoot支持的Java最低版本,熟悉mysql基本理论具体指啥,是锁这种具体原理还是分库分表这些业务场景,spring这些专业词汇,大小写要写对(全篇简历都有这个问题,显得不严谨),熟悉使用框架进行业务开发就别写了,如果要写,起码要写到框架原理部分吧,比如aop,启动原理什么的,springcloud具体指哪些模块呢,写清楚,网关还是鉴权还是什么,“改造”没必要写吧,你直接说用springcloud开发的不就行了(2)项目经历:首先格式就有大问题,时间怎么能换行呢,调整一下,响应速度那个,如果指的是将部分数据从其他数据库转到redis的提升就别写了,因为这个不算难点,redis可以写写分布式这些,比如容灾怎么实现的,数据库同步怎么做的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务