cogs 247 售票系統 線段樹

2022-05-12 21:36:06 字數 1903 閱讀 8119

★★☆   輸入檔案:railway.in輸出檔案:railway.out簡單對比

時間限制:1 s   記憶體限制:128 mb

某次列車途經c個城市,城市編號依次為1到c,列車上共有s個座位,鐵路局規定售出的車票只能是坐票, 即車上所有的旅客都有座。售票系統是由計算機執行的,每乙個售票申請包含三個引數,分別用o、d、n表示,o為起始站,d為目的地站,n為車票張數。售票 系統對該售票申請作出受理或不受理的決定,只有在從o到d的區段內列車上都有n個或n個以上的空座位時該售票申請才被受理。請你寫乙個程式,實現這個自動 售票系統。

第一行包含三個用空格隔開的整數c、s和r,其中1≤c≤60000, l≤s≤60000,1≤r≤60000。c為城市個數,s為列車上的座位數,r為所有售票申請總數。接下來的r行每行為乙個售票申請,用三個由空格隔開的整數o,d和n表示,o為起始站,d 為目的地站,n為車票張數,其中1≤d≤c,1≤o≤c,所有的售票申請按申請的時間從早到晚給出。

輸出共有r行,每行輸出乙個「yes」或「no」,表示當前的售票申請被受理或不被受理。

輸入:

4 6 4

1 4 2

1 3 2

2 4 3

1 2 3

輸出:

yes

yesno

no啊呵呵呵 感覺這一道題好像很簡單 又好像很難的樣子

所以 。。。這一道題的資料看起來有一點可怕啊

先花n logn的時間建樹 60000*20=120 0000 60000個詢問 每個logn 也是120 0000

加起來看起來好像沒有超時的樣子誒~qaq反正這一道題的標籤是線段樹

就是說可以先加到線段樹中

再查一下區間最大值是否大於總座位數 如果大於就是no 再把區間減去剛才加的值

否則就輸出yes啦 (《彷彿很簡單的樣子)

敲一敲試試

然鵝發現事情並不簡單 首先要打乙個標記 還有乙個很坑很坑的點:

我第一次交是33分 那麼到底是為什毛?

原因是 這是左閉右開區間

就是說x站到y站 y站是下車的 不算!要在輸入後把y--

太尷尬了 本以為能一遍a(太蒟了)

**如下 (本人萌新 剛學打標記不久qaq)

#include#define ls (p*2)

#define rs (p*2+1)

#define mid (l+r>>1)

#define lson ls,l,mid

#define rson rs,mid+1,r

#define maxn 60005

#define ll long long

#define inf 0x3f3f3f3f

using

namespace

std;

intn,s,m;

ll sum[maxn

<<2

];ll lazy_tag[maxn

<<2

];void pushdown(int p,int l,int

r)void add(int p,int l,int r,int s,int t,int

z) pushdown(p,l,r);

add(lson,s,t,z);

add(rson,s,t,z);

sum[p]=max(sum[ls],sum[rs]);

return;}

ll max(

int p,int l,int r,int s,int

t)int

main()

else

printf(

"yes\n");

} return0;

}

巨集定義一波走天下♪(^∇^*)

cogs247 售票系統 線段樹

某次列車途經c個城市,城市編號依次為1到c,列車上共有s個座位,鐵路局規定售出的車票只能是坐票,即車上所有的旅客都有座。售票系統是由計算機執行的,每乙個售票申請包含三個引數,分別用o d n表示,o為起始站,d為目的地站,n為車票張數。售票 系統對該售票申請作出受理或不受理的決定,只有在從o到d的區...

cogs247 售票系統 線段樹

輸入檔案 railway.in 輸出檔案 railway.out 時間限制 1 s 記憶體限制 128 mb 問題描述 某次列車途經c個城市,城市編號依次為1到c,列車上共有s個座位,鐵路局規定售出的車票只能是坐票,即車上所有的旅客都有座。售票系統是由計算機執行的,每乙個售票申請包含三個引數,分別用...

cogs247 售票系統 線段樹

輸入檔案 railway.in 輸出檔案 railway.out 時間限制 1 s 記憶體限制 128 mb 問題描述 某次列車途經c個城市,城市編號依次為1到c,列車上共有s個座位,鐵路局規定售出的車票只能是坐票,即車上所有的旅客都有座。售票系統是由計算機執行的,每乙個售票申請包含三個引數,分別用...