首页 > 其他分享 >P1083 [NOIP2012 提高组] 借教室

P1083 [NOIP2012 提高组] 借教室

时间:2024-11-19 21:08:48浏览次数:1  
标签:租借 NOIP2012 sj 教室 long mid 订单 P1083

题目

在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。

面对海量租借教室的信息,我们自然希望编程解决这个问题。

我们需要处理接下来 nn 天的借教室信息,其中第 ii 天学校有 riri​ 个教室可供租借。共有 mm 份订单,每份订单用三个正整数描述,分别为 dj,sj,tjdj​,sj​,tj​,表示某租借者需要从第 sjsj​ 天到第 tjtj​ 天租借教室(包括第 sjsj​ 天和第 tjtj​ 天),每天需要租借 djdj​ 个教室。

我们假定,租借者对教室的大小、地点没有要求。即对于每份订单,我们只需要每天提供 djdj​ 个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。

借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。这里的无法满足指从第 sjsj​ 天到第 tjtj​ 天中有至少一天剩余的教室数量不足 djdj​ 个。

现在我们需要知道,是否会有订单无法完全满足。如果有,需要通知哪一个申请人修改订单。

输入格式

第一行包含两个正整数 n,mn,m,表示天数和订单的数量。

第二行包含 nn 个正整数,其中第 ii 个数为 riri​,表示第 ii 天可用于租借的教室数量。

接下来有 mm 行,每行包含三个正整数 dj,sj,tjdj​,sj​,tj​,表示租借的数量,租借开始、结束分别在第几天。

每行相邻的两个数之间均用一个空格隔开。天数与订单均用从 11 开始的整数编号。

输出格式

如果所有订单均可满足,则输出只有一行,包含一个整数 00。否则(订单无法完全满足)

输出两行,第一行输出一个负整数 −1−1,第二行输出需要修改订单的申请人编号。

输入输出样例

输入样例

4 3 
2 5 4 3 
2 1 3 
3 2 4 
4 2 4

输出样例

-1
2

代码示例

#include <cstdio>

const int N = 1e6 + 10;
long long a[N], d[N], l[N], r[N], n, m, b[N];

// 检查前 x 个订单是否都能满足
bool check(long long x) {
    for (long long i = 1; i <= n; i++) b[i] = 0;
    for (long long i = 1; i <= x; i++) {
        b[l[i]] += d[i];
        b[r[i] + 1] -= d[i];
    }
    long long sum = 0;
    for (long long i = 1; i <= n; i++) {
        sum += b[i];
        if (sum > a[i]) return false;
    }
    return true;
}

int main() {
    scanf("%lld %lld", &n, &m);
    for (long long i = 1; i <= n; i++) 
        scanf("%lld", &a[i]);
    for (long long i = 1; i <= m; i++)
        scanf("%lld %lld %lld", &d[i], &l[i], &r[i]);

    if (check(m)) {
        printf("0\n");
        return 0;
    }

    long long left = 1, right = m, x = m;
    while (left <= right) {
        long long mid = (left + right) >> 1;
        if (check(mid)) {
            left = mid + 1;
        } else {
            x = mid;
            right = mid - 1;
        }
    }

    printf("-1\n%lld\n", x);
    return 0;
}

标签:租借,NOIP2012,sj,教室,long,mid,订单,P1083
From: https://www.cnblogs.com/Xuxuan18/p/18555029

相关文章

  • luogu P1083 借教室
    [NOIP2012提高组]借教室题目描述在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来\(n\)......
  • 借教室
    [NOIP2012提高组]借教室题目描述在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来\(n\)......
  • 【圆圆的日语教室】日语入门第3课-浊音+半浊音+拗音+日常问候
    第三课浊音浊音表浊音发音规则特殊的:じ[ji]:音似“鸡”,j类似国际音标中的[dʒ]ぢ[di]:发音同じ[ji]づ[du]:发音同ず[zu],但是在打字时还是输入各自的罗马字は行:浊化和半浊化拗音每一列大假名相同,都是い[i]段的假名,小假名都是やゆよ。大假名只有辅音发音,即它的元音[i]不起作用。......
  • 计算机毕业设计项目推荐,SSM山西能源学院教室管理系统81671(开题答辩+程序定制+全套文案
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,山西能源学院教室管理系统当然也不能排除在外。山西能源学院教室管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用 SSM技术构建的一个管理系......
  • 【圆圆的日语教室】日语入门第1课
    第1课日语的文字文字的组成汉字简体繁体(部分不同于中文中的繁体)日本人自己造的汉字(遵循汉字的象形文字的规则,容易猜测含义)假名平假名柔和(弯弯扭扭)、片假名刚硬(横平竖直)罗马字用于标音文字的变迁总结自kimi-chat日语文字的演变历史是一个漫长而复杂的过程,它包......
  • 【圆圆的日语教室】日语入门第2课
    第二课相似的假名平假名的书写あ(a)的书写第二笔不要太直,它是从草书演变过来的,特点是圆润有弧度第三笔要交叉长得像“安”い(i)的书写第一笔要勾上去う(u)的书写第一笔:点第二笔:起笔不要太平,先往上走再往下拐。え(e)的书写像π第一笔:点第二笔:横上去,折下......
  • 基于springboot的教室预约与管理系统
    收藏关注不迷路!!......
  • P10833 [COTS 2023] 下 Niz题解
    题意:给定长度为\(N\)的序列\(a\),求满足以下条件的\((l,r)\)对数:\(1\lel\ler\leN\);\(a_l,a_{l+1},\cdots,a_{r-1},a_r\)是\(1\simr-l+1\)的排列。\(1\leN\le10^6\);\(1\lea_i\leN\)。思路首先,“排列”本身这个性质是很强的。因为排列本身需要从1开......
  • [NOIP2012 提高组] 国王游戏 题解
    [NOIP2012提高组]国王游戏典贪心。设当前点为\(i\),\(\prod_{k=0}^{i-1}a_k\)为\(x\),则对于\(i,j\)两点的答案:(为了方便,记\(i+1=j\))\[\mathit{res}_1=\max\bigg(\dfracx{b_i},\dfrac{xa_i}{b_j}\bigg)~;\]若交换,则:\[\mathit{res}_2=\max\bigg(\dfracx{b_j},\dfrac{......
  • P10833 [COTS 2023] 下 Niz
    题目链接主要算法分治(最大值分治),st表思路1.因为我们考虑最主要的限制条件是最大值和排列,所以如果我们知道最大值就知道答案的长度。所以考虑按最大值分治,统计左边对右边的贡献。2.接下来就是如何快速考虑一个区间是否合法,一个显然的是没有相同数,所以可以记前一个数的位置的最......