7 16 森森快遞 30 分

2021-09-27 01:56:33 字數 3225 閱讀 3971

森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的n個城市,這些城市從左到右依次從0到(n−1)編號。由於道路限制,第i號城市(i=0,⋯,n−2)與第(i+1)號城市中間往返的運輸貨物重量在同一時刻不能超過c​i​​公斤。

公司開張後很快接到了q張訂單,其中j張訂單描述了某些指定的貨物要從s​j​​號城市運輸到t​j​​號城市。這裡我們簡單地假設所有貨物都有無限貨源,森森會不定時地挑選其中一部分貨物進行運輸。安全起見,這些貨物不會在中途卸貨。

為了讓公司整體效益更佳,森森想知道如何安排訂單的運輸,能使得運輸的貨物重量最大且符合道路的限制?要注意的是,發貨時間有可能是任何時刻,所以我們安排訂單的時候,必須保證共用同一條道路的所有貨車的總重量不超載。例如我們安排1號城市到4號城市以及2號城市到4號城市兩張訂單的運輸,則這兩張訂單的運輸同時受2-3以及3-4兩條道路的限制,因為兩張訂單的貨物可能會同時在這些道路上運輸。

7
我們選擇執行最後兩張訂單,

即把5公斤貨從城市4運到城市2,

並且把2公斤貨從城市4運到城市5,

就可以得到最大運輸量7公斤。

思路:最開始想暴力寫的,但是!!!想想暴力估計沒希望,於是想到線段樹維護最小值,看到網上題解又知道了要先貪心排列區間,然後再線段樹維護最小值,得到最大的可用。

/*

線段樹 + 貪心

查詢區間最小值(利用線段樹),然後先貪心排序(按照區間前後)

*//*

_ooooo_

o8888888o

88" . "88

(| -_- |)

o\ = /o

____/`---'\____

.' \\| |// `.

/ \\||| : |||// \

/ _||||| -:- |||||- \

| | \\\ - /// | |

| \_| ''\---/'' | |

\ .-\__ `-` ___/-. /

___`. .' /--.--\ `. . __

."" '< `.___\__/___.' >'"".

| | : `- \`.;`\ _ /`;.`/ - ` : | |

\ \ `-. \_ __\ /__ _/ .-` / /

*****=`-.____`-.___\_____/___.-`____.-'*****=

'=---='

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

buddha blesses never get bug

*/#include

#include

#include

#include

#include

#include

using

namespace std;

#define ls(x) x << 1

#define rs(x) x << 1 | 1

typedef

long

long ll;

const

int m =

1e5+5;

typedef

struct

node;

typedef

struct point

int x, y;

}point;

node node[m *4]

;vectorvec;

int num[m]

;void

push_up

(int root)

void

push_down

(int root)

//標記下傳

}void

build

(int root,

int left,

int right)

//建樹

int mid =

(left + right)/2

;build(ls

(root)

, left, mid)

;build(rs

(root)

, mid +

1, right)

;push_up

(root);}

ll query

(int root,

int left,

int right)

//查詢

void

update

(int root,

int left,

int right, ll val)

//修改

if(node[root]

.lazy)

push_down

(root)

;int mid =

(node[root]

.left + node[root]

.right)/2

;if(right <= mid)

update(ls

(root)

, left, right, val)

;else

if(left > mid)

update(rs

(root)

, left, right, val)

;else

push_up

(root);}

bool

cmp(point a, point b)

intmain()

sort

(vec.

begin()

, vec.

end(

), cmp)

;for

(int i =

0; i < q;

++i)

printf

("%lld\n"

, ans)

;return0;

}

PTA 森森快遞 (30 分)

7 14 森森快遞 30 分 森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的n個城市,這些城市從左到右依次從0到 n 1 編號。由於道路限制,第i號城市 i 0,n 2 與第 i 1 號城市中間往返的運輸貨物重量在同一時刻不能超過c i 公斤。公司開張...

L3 017 森森快遞 (30 分

森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的n個城市,這些城市從左到右依次從0到 n 1 編號。由於道路限制,第i號城市 i 0,n 2 與第 i 1 號城市中間往返的運輸貨物重量在同一時刻不能超過c i 公斤。公司開張後很快接到了q張訂單,其中j張...

7 3 森森快遞 35分

7 3 森森快遞 35分 有兩個地方超時,要用線段樹維護資料。7 3 森森快遞 35分 森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的n個城市,這些城市從左到右依次從0到 n 1 編號。由於道路限制,第i號城市 i 0,n 2 與第 i 1 號城市中間...