時間限制:c/c++
1秒,其他語言2秒
空間限制:c/c++
131072k,其他語言262144k
64bit io format:
%lld
**:
在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。輸入描述:面對海量租借教室的資訊,我們自然希望程式設計解決這個問題。
我們需要處理接下來n天的借教室資訊,其中第i天學校有ri個教室可供租借。共有m份訂單,每份訂單用三個正整數描述,分別為dj, sj,
tj,表示某租借者需要從第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj個教室。
我們假定,租借者對教室的大小、地點沒有要求。即對於每份訂單,我們只需要每天提供dj個教室,而它們具體是哪些教室,每天是否是相同的教室則不用考慮。
借教室的原則是先到先得,也就是說我們要按照訂單的先後順序依次為每份訂單分配教室。如果在分配的過程中遇到乙份訂單無法完全滿足,則需要停止教室的分配,通知當前申請人修改訂單。這裡的無法滿足指從第sj天到第tj天中有至少一天剩餘的教室數量不足dj個。
現在我們需要知道,是否會有訂單無法完全滿足。如果有,需要通知哪乙個申請人修改訂單。
第一行包含兩個正整數n, m,表示天數和訂單的數量。輸出描述:第二行包含n個正整數,其中第i個數為ri,表示第i天可用於租借的教室數量。
接下來有m行,每行包含三個正整數dj, sj, tj,表示租借的數量,租借開始、結束分別在第幾天。
每行相鄰的兩個數之間均用乙個空格隔開。天數與訂單均用從1開始的整數編號。
如果所有訂單均可滿足,則輸出只有一行,包含乙個整數0。否則(訂單無法完全滿足)輸出兩行,第一行輸出乙個負整數-1,第二行輸出需要修改訂單的申請人編號。示例1
輸入
複製
432
5432
1332
4424
輸出
複製
-
12
說明
第1 份訂單滿足後,4 天剩餘的教室數分別為0,3,2,3。
第2 份訂單要求第2 天到第4 天每天提供3 個教室,而第3 天剩餘的教室數為2,因此無法滿足。分配停止,通知第2個申請人修改訂單。
備註:
對於10%的資料,有1≤n,m≤10; 對於30%的資料,有1≤n,m≤1000; 對於70%的資料,有1≤n,m≤105;noip原題對於100%的資料,有1≤n, m≤106, 0≤ri, dj≤109, 1≤sj≤tj≤ n。
第一反應線段樹,不過線段樹懶得打,我們用其他方法
差分+二分
我們都知道字首和,所謂差分簡單理解就是字首和的逆運算
字首和:
其中陣列a可以看做是相鄰sum陣列的差值
for
(int i=
1;i<=n;i++
)
差分:
差分就是給你相鄰的差值,然後求出每一項
for
(int i=
1;i<=n;i++
)
字首和是用元資料求元與元之間的並集關係,而差分則是根據元與元之間的邏輯關係求元資料,是互逆思想
這個題為什麼能用二分呢?
二分的條件:狀態的決策過程或者序列是否滿足單調性或者可以區域性捨棄性
如果第x個訂單無法滿足,那x之後的就都不用看了,我們要找的答案就一定在x之前,如果x能滿足,答案就在x之後,這不就是典型的二分嗎?
dif[l[i]]+
=d[i]
;dif[r[i]+1
]-=d[i]
;
我們在讀入時是 d l r,分別表示數量和時間範圍
dif[x]+=d 可以理解為第x天之後(含第x天)的每天都需要數量為d的教室,為什麼?看一下下面的**,need[i]表示第i天的需求,need是由dif推導出來的,也就是dif[i]的結果會影響到第i天之後的每乙個need,這樣我們就可以通過改變dif來實現操作區間
但是我們數量d的範圍是[l,r],所以還要加乙個dif[r[i]+1]-=d[i],也就是第r+1天之後的數量減d,這樣就和之前加d的影響給抵消了,最終效果只體現在區間[l,r]
need[i]
=need[i-1]
+dif[i];if
(need[i]
>a[i]
)return0;
//供不應需 ,教室不夠
#include
using
namespace std;
int n,m;
const
int maxn=
1e6+3;
int dif[maxn]
,need[maxn]
;int a[maxn]
;int d[maxn]
,l[maxn]
,r[maxn]
;bool
isok
(int x)
for(
int i=
1;i<=n;i++
)return1;
}int
main()
while
(lprintf
("-1\n%d"
,l);
return0;
}
每日一題 4月7日題目精講 樹
樹 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k 其他語言262144k 64bit io format lld 題目描述 shy有一顆樹,樹有n個結點。有k種不同顏色的染料給樹染色。乙個染色方案是合法的,當且僅當對於所有相同顏色的點對 x,y x到y的路徑上的所有點的顏色...
每日一題 5月7日題目精講 火 皇家烈焰
火 皇家烈焰 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld帕秋莉掌握了一種火屬性魔法 由於鍾愛掃雷遊戲,帕秋莉把自己圖書館前的走廊看作乙個一維的掃雷地圖,她製造了很多烈焰,排在這條走廊內 現在帕秋莉告訴你一部分...
每日一題 8月7日題目精講 雙棧排序
時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld tom最近在研究乙個有趣的排序問題。如圖所示,通過2個棧s1和s2,tom希望借助以下4種操作實現將輸入序列公升序排序。操作a 如果輸入序列不為空,將第乙個元素壓入...