L3 017 森森快遞 (30 分

2021-09-13 20:23:29 字數 2180 閱讀 4959

森森開了一家快遞公司,叫森森快遞。因為公司剛剛開張,所以業務路線很簡單,可以認為是一條直線上的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行,每行給出一張訂單的起始及終止運輸城市編號。題目保證所有編號合法,並且不存在起點和終點重合的情況。

在一行中輸出可運輸貨物的最大重量。

10 6

0 7 8 5 2 3 1 9 10

0 91 8

2 76 3

4 54 2

7
題意,給出一些區間,這些區間的最大值是所有小區間取最小,問怎麼選擇區間可以使取值最大。

參照大神的做法,首先給區間進行排序,按照右端點公升序排序,相同的左端點公升序,可以從左往右排開,

然後考慮兩個相鄰區間取組大值問題,如果兩個區間是乙個被另乙個包含,顯然大的取值受小的取值限制,也就是說選擇小區間最優,比如乙個區間是[2,7],另乙個是[3,5],前乙個區間所能取得的最大值是min([2,3],[3,4],[4,5],[5,6],[6,7]),而後乙個區間是min([3,4],[4,5]),顯然後乙個區間的約束少,所取值大於等於前乙個區間的取值。

如果兩個區間是相交的,相交部分為b,那麼設左邊區間是a和b組成,右邊是b和c組成,這個時候怎麼判斷,關鍵是看b的取值大小,

如果b最大,這個時候取min(a + c,b)(因為b是公共部分,如果b能承載的了a和c的和,那自然很好,如果不行,就得受b約束),

如果b最小,那不用說兩個區間總的最多也就是取值b,如果b大小折中,那自然還是取b,比如是a>b>c,零右邊區間取值c,中間段剩下b-c,總的就是b了。

所以綜合後兩種情況都是a+c>b,相交就取值min(a+c,b),

排序後可以從左往右乙個乙個求區間最大值,然後更新這個區間都減去這個值,表示後邊與這個區間相交的受相交部分影響,所以要更新。

#include #include #include #include #include #include #define inf 0x3f3f3f3f3f

using namespace std;

typedef pairpa;

typedef long long ll;

int n,q;

ll ans;

int v[100005];

pa p[100005];

int tree[400005],lazy[400005];

bool cmp(const pa &a,const pa &b)

void build(int l,int r,int t)

}void pushdown(int t)

void update(int l,int r,int t,int l,int r,int d)

}ll query(int l,int r,int t,int l,int r)

int main()

build(0,n - 2,1);

for(int i = 0;i < q;i ++)

//進行貪心 右邊區間先從小到大排序 然後在左區間從小到大排序

sort(p,p + q,cmp);

for(int i = 0;i < q;i ++)

printf("%lld",ans);

}

L3 017 森森快遞(線段樹 貪心)

解題思路 一開始感覺是圖論最大流題,但是有些細節感覺沒法處理。後來再仔細一想,可以用線段樹 貪心來做。但是又有點想偏了,想成優先區間最小的部分,其實應該是優先右邊界最小的 include define n 100001 using namespace std typedef long long ll...

PTA 森森快遞 (30 分)

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

7 16 森森快遞 30 分

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