遙控車是在是太漂亮了,韻韻的好朋友都想來參觀,所以遊樂園決定舉辦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 44 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...