森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的n個城市,這些城市從左到右依次從0到(n−1)編號。由於道路限制,第i號城市(i=0,⋯,n−2)與第(i+1)號城市中間往返的運輸貨物重量在同一時刻不能超過ci公斤。
公司開張後很快接到了q張訂單,其中j張訂單描述了某些指定的貨物要從sj號城市運輸到tj號城市。這裡我們簡單地假設所有貨物都有無限貨源,森森會不定時地挑選其中一部分貨物進行運輸。安全起見,這些貨物不會在中途卸貨。
為了讓公司整體效益更佳,森森想知道如何安排訂單的運輸,能使得運輸的貨物重量最大且符合道路的限制?要注意的是,發貨時間有可能是任何時刻,所以我們安排訂單的時候,必須保證共用同一條道路的所有貨車的總重量不超載。例如我們安排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 號城市中間...