日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

503. 借教室

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 503. 借教室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

503. 借教室

題意:

在大學期間,經常需要租借教室。

大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。

教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。

面對海量租借教室的信息,我們自然希望編程解決這個問題。

我們需要處理接下來n天的借教室信息,其中第i天學校有ri個教室可供租借。

共有m份訂單,每份訂單用三個正整數描述,分別為dj,sj,tj,表示某租借者需要從第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj個教室。

我們假定,租借者對教室的大小、地點沒有要求。

即對于每份訂單,我們只需要每天提供dj個教室,而它們具體是哪些教室,每天是否是相同的教室則不用考慮。

借教室的原則是先到先得,也就是說我們要按照訂單的先后順序依次為每份訂單分配教室。

如果在分配的過程中遇到一份訂單無法完全滿足,則需要停止教室的分配,通知當前申請人修改訂單。

這里的無法滿足指從第sj天到第tj天中有至少一天剩余的教室數量不足dj個。

現在我們需要知道,是否會有訂單無法完全滿足。

如果有,需要通知哪一個申請人修改訂單。

題解:

題目本質就是對一個區間進行修改,看到第幾次修改時會出現負數
線段樹肯定可以做
這里說說二分+差分的方法
我們可以發現教室的數量隨著租借的情況增長而單調遞減,所以我們可以二分教室將在第k次租借時不夠
如何驗證k是否正確呢?我們求出教室的差分數組,然后對前k次教室進行驗證,一旦發現存在負的,return 0
詳細看代碼

代碼:

#include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace std;typedef long long LL;const int N = 1000010;int n, m; int r[N], d[N], s[N], t[N]; LL b[N];bool check(int k) {for (int i = 1; i <= n; i ++ ) b[i] = r[i];for (int i = 1; i <= k; i ++ ){b[s[i]] -= d[i];b[t[i] + 1] += d[i];}LL res = 0;for (int i = 1; i <= n; i ++ ){res += b[i];if (res < 0) return true;}return false; }int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i ++ ) scanf("%d", &r[i]);for (int i = n; i; i -- ) r[i] -= r[i - 1];for (int i = 1; i <= m; i ++ ) scanf("%d%d%d", &d[i], &s[i], &t[i]);int l = 1, r = m;while (l < r){int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}if (check(r)){puts("-1");printf("%d\n", r);}else puts("0");return 0; }

總結

以上是生活随笔為你收集整理的503. 借教室的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。