有兩種做法,一種是用set,將該值裝入容器,然後用find查詢該值的位置,比較一下下乙個和前乙個的與該值的差值,選差值小的那個,相等選前面那個,注意別越界.
#include
using
namespace std;
const
int max_val =
2e9;
setint,
int>
> a;
intmain()
//it = a.find(make_pair(x, i));
it --;if
(it != a.
begin()
) cout << ans.first <<
" "<< ans.second <<
"\n";}
}
還可以用鍊錶來做
#include
using
namespace std;
typedef pair<
int,
int> pii;
const
int n =
1e5+10;
int n;
pii a[n]
, ans[n]
;int p[n]
, l[n]
, r[n]
;int
main()
sort
(a +
1, a +
1+ n)
;for
(int i =
1;i <= n;
++ i)
a[0]
.first =
1e9, a[n+1]
.first =
-1e9
;for
(int i = n;i >=2;
-- i)
for(
int i =
2;i <= n;
++ i)
cout << ans[i]
.first <<
' '<< ans[i]
.second <<
'\n'
;}
AcWing 13 找出陣列中重複的數字
題目描述 給定乙個長度為 n 的整數陣列nums,陣列中所有的數字都在 0 n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。注意 如果某些數字不在 0 n 1的範圍內,或陣列中不包含重複數字,則返回 1 樣例給定 nums...
AcWing演算法基礎1 3
二分 二分分為整數二分和實數二分,其中整數二分模板有兩個 模板 整數二分模板 第一種模板將區間分為 l mid 和 mid 1,r 1 int bsearch 1 int l,intr 2 9return l 10 第二種模板把區間分為 l mid 1 和 mid r 需要注意的是,這裡算mid時要...
AcWing 日期問題
小明正在整理一批歷史文獻。這些歷史文獻 現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有採用年 月 日的,有採用月 日 年的,還有採用日 月 年的。更加麻煩的是,年份也都省略了前兩位,使得文獻上的乙個日期,存在很多可能的日...