演算法競賽高階指南 CH1301鄰值查詢(set)

2021-09-25 23:38:03 字數 796 閱讀 4771

題目描述:

給定乙個長度為 n 的序列 a,a 中的數各不相同。對於 a 中的每乙個數 ai,求:min1≤j輸入格式

第一行輸入整數n,代表序列長度。第二行輸入n個整數a1…an,代表序列的具體數值,數值之間用空格隔開。

輸出格式

輸出共n-1行,每行輸出兩個整數,數值之間用空格隔開。分別表示當i取2~n時,對應的min1≤j資料範圍

n≤10^5,|ai|≤10^9

輸入樣例:

31 5 3

輸出樣例:

4 12 1

分析:

set的經典應用,可以找乙個元素的前驅和後繼,注意stl的find都為左閉右開的,如果it==s.end,則說明未找到。注意理解**,有注釋

#include using namespace std;

const int n=100005;

int a[n];

set>s;

pairans;

int main()

it=s.find(make_pair(a[i],i));

if (it-- != s.begin() && ans.first >= a - (*it).first)//it是否為第乙個,如果是先--

ans = make_pair(a - (*it).first, (*it).second);

/*if(it!=s.begin()) //這樣也對

*/cout<}

return 0;

}

CH1301 鄰值查詢

給定乙個長度為 n 的序列 a,a 中的數各不相同。對於 a 中的每乙個數 a ia i ai 求 m in 1 j ai aj min 1 jmi n 1 j ai aj 以及令上式取到最小值的 j 記為 p ip i pi 若最小值點不唯一,則選擇使 a ja j aj 較小的那個。題解 可以借...

鄰值查詢CH1301(平衡樹)

給定乙個長度為 n 的序列 a,a 中的數各不相同。對於 a 中的每乙個數 a i 求 m i n 1 j i a i a j 以及令上式取到最小值的 j 記為 p i 若最小值點不唯一,則選擇使 a j 較小的那個。資料範圍 n 105 ai 109 題解 可以借助set來實現,set的查詢是o ...

《演算法競賽高階指南》 防曬

有c頭奶牛進行日光浴,第i頭奶牛需要minspf i 到maxspf i 單位強度之間的陽光。每頭奶牛在日光浴前必須塗防曬霜,防曬霜有l種,塗上第i種之後,身體接收到的陽光強度就會穩定為spf i 第i種防曬霜有cover i 瓶。求最多可以滿足多少頭奶牛進行日光浴。輸入格式 第一行輸入整數c和l。...