傳送門:51nod 1272
題目大意:從一組數中找出一對數,滿足左邊的數小於等於右邊的數,求兩數的最大距離。
思路:
1.單調棧,建議學習一下單調棧的應用:單調棧原理及應用。理論上時間複雜度為o(n),但是實際沒貪心快……並且最後一組會超時……迷思。不過還是給出單調棧的**,大體思路是用乙個單調遞增棧處理,並用乙個普通棧儲存每次不能使棧單調的被彈出的元素。注意,我這裡單調棧儲存的是下標。
2.貪心。先將資料記錄位置和值,並從大到小排序。然後從小到大插入每個數,這樣插入的數就保證了後面的比前面的大,而只需要記錄出現的位置最小值,每次插入的時候記錄當前的位置和最小位置之差的最大值就可以了。注意,如果兩個元素值相同時要按照位置從小到大排序,否則會出錯。
**:
單調棧(會超時):
#include#include#include#includeusing namespace std;
int main()
st1.push(i); //將當前元素入棧
while(!st2.empty())
}} printf("%d\n",mx);
return 0;
}
貪心:
#include#include#includeusing namespace std;
struct node
a[50010];
int cmp(node x,node y)
printf("%d\n",ans);
return 0;
}
51nod1272 最大距離 棧 貪心
1272 最大距離 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 給出乙個長度為n的整數陣列a,對於每乙個陣列元素,如果他後面存在大於等於該元素的數,則這兩個數可以組成一對。每個元素和自己也可以組成一對。例如 可以組成11對,如下 數字為下標 ...
51Nod 1272 最大距離
acm模版 方法有很多種,這裡介紹兩種寫法。第一種比較容易想到的寫法是將鍵值和下標封裝在結構體中進行排序,然後從尾部檢索一遍即可,複雜度o nlogn 第二種是使用單調棧優化,可以使複雜度低至o n one include include include using namespace std co...
51nod 1272 最大距離
codility 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 給出乙個長度為n的整數陣列a,對於每乙個陣列元素,如果他後面存在大於等於該元素的數,則這兩個數可以組成一對。每個元素和自己也可以組成一對。例如 可以組成11對,如下 數字為下標 0,0 0,2 1,...