Vijos1459 車展 數學)

2022-05-13 17:25:00 字數 1676 閱讀 9307

遙控車是在是太漂亮了,韻韻的好朋友都想來參觀,所以遊樂園決定舉辦m次車展。車庫裡共有n輛車,從左到右依次編號為1,2,…,n,每輛車都有乙個展台。剛開始每個展台都有乙個唯一的高度h[i]。主管已經列好一張單子:

l1 r1

l2 r2

…lm rm

單子上的(li,ri)表示第i次車展將要展出編號從li到ri的車。

為了更加美觀,展覽時需要調整展台的高度,使參展所有展台的高度相等。展台的高度增加或減少1都需花費1秒時間。由於管理員只有乙個人,所以只好對每個展台依次操作。每次展覽結束後,展台高度自動恢復到初始高度。

請告訴管理員為了舉辦所有展覽,他最少需要花多少時間將展台調整好。

第一行為兩個正整數n、m。

第二行共n個非負整數,表示第i輛車展台的高度h[i]。

接下來m行每行2個整數li、ri(li≤ri)。

乙個正整數,調整展台總用時的最小值。

6 4

4 1 2 13 0 9

1 52 6

3 42 2

48

各個測試點1s

對於50%的資料 n≤500,m≤1000;

對於80%的資料 n≤1000,m≤100000;

對於100%的資料n≤1000,m≤200000;

答案在2^64以內。

birdor

分析可知,將高度都調整成區間中位數時,代價最小。

列舉i作為中心,向兩邊擴充套件序列。

先擴充套件左邊,用鍊錶記錄每個「大於a[i]的數比小於a[i]的數多x」的位置po1。

再擴充套件右邊,用右邊的每個「大於a[i]的數比小於a[i]的數少x」的位置po2,匹配之前左邊記錄的位置,則mid[po1][po2]=i

之後o(n^2)暴力累加調整高度的花費。

1

/*by silvern

*/2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9const

int mxn=1010;10

intread()

13while(ch>='

0' && ch<='9')

14return x*f;15}

16int pre[mxn],id[mxn],m[mxn<<2

];17

intmid[mxn][mxn];

18int

a[mxn];

19int

n,q;

20int

main()

24for(i=1;i<=n;i++)

36 d=0;x=-1;37

for(j=i;j<=n;j++)

43for(int k=m[x-d-1+mxn];k!=-1;k=pre[k])46}

47}48int

st,ed;

49long

long ans=0;50

while(q--)

58 printf("

%lld\n

",ans);

59return0;

60 }

14 5繼承與組合

程式的版權和版本宣告部分 檔名稱 a.cpp 作 者 孔雲 完成日期 2014年5月29日 版 本 號 v1.0 輸入描述 num,name,year,month,day 和修改後的year,month,day 問題描述 1 birthdate 生日類 含有 year,month,day 等資料成員...

1 4 5 收集trace日誌

trace日誌有助於發現故障的詳細資訊,確認問題原因 影響範圍 故障現象。前提條件 alert日誌提及到的一些trace日誌和incident trace檔案,要一併收集。操作步驟 步驟 1 以oracle使用者登入。步驟 2 根據alert日誌中提示所涉及的trace日誌檔案,收集trace日誌。...

145 僅僅反轉字母

題目描述 給定乙個字串 s,返回 反轉後的 字串,其中不是字母的字元都保留在原地,而所有字母的位置發生反轉。示例 1 輸入 ab cd 輸出 dc ba 示例 2 輸入 a bc def ghij 輸出 j ih gfe dcba 示例 3 輸入 test1ng leet code q 輸出 qed...