7-14 森森快遞 (30 分)
森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的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兩條道路的限制,因為兩張訂單的貨物可能會同時在這些道路上運輸。
輸入格式:
輸入在第一行給出兩個正整數n和q(2≤n≤10
5 , 1≤q≤10
5 ),表示總共的城市數以及訂單數量。
第二行給出(n−1)個數,順次表示相鄰兩城市間的道路允許的最大運貨重量c
i (i=0,⋯,n−2)。題目保證每個c
i 是不超過2
31 的非負整數。
接下來q行,每行給出一張訂單的起始及終止運輸城市編號。題目保證所有編號合法,並且不存在起點和終點重合的情況。
輸出格式:
在一行中輸出可運輸貨物的最大重量。
#includeusing namespace std;
#define fi first
#define se second
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define ll long long
const int n=2e5+5;
ll lazy[n<<2],min[n<<2];
int n,m,a[n];
void pushdown(int rt)
void build(int l,int r,int rt)
int mid=(l+r)>>1;
build(lson),build(rson);
min[rt]=min(min[rt<<1],min[rt<<1|1]);
}ll qmin(int l,int r,int l,int r,int rt)
void update(int l,int r,int c,int l,int r,int rt)
pushdown(rt);
int mid=(l+r)>>1;
if(l<=mid)update(l,r,c,lson);
if(r>mid)update(l,r,c,rson);
min[rt]=min(min[rt<<1],min[rt<<1|1]);
}pairp[n];
int main()
; }
sort(p,p+m);
ll ans=0;
for(int i=0; icout
}
7 16 森森快遞 30 分
森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的n個城市,這些城市從左到右依次從0到 n 1 編號。由於道路限制,第i號城市 i 0,n 2 與第 i 1 號城市中間往返的運輸貨物重量在同一時刻不能超過c i 公斤。公司開張後很快接到了q張訂單,其中j張...
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 號城市中間...