鏈接:https://ac.nowcoder.com/acm/contest/317/G
來源:牛客網
小a有一個長度為nn的排列。定義一段區間是"萌"的,當且僅當把區間中各個數排序后相鄰元素的差為11
現在他想知道包含數x,yx,y的長度最小的"萌"區間的左右端點
也就是說,我們需要找到長度最小的區間[l,r][l,r],滿足區間[l,r][l,r]是"萌"的,且同時包含數xx和數yy
如果有多個合法的區間,輸出左端點最靠左的方案。
說實話:這道題我還沒搞懂
#include<iostream> #include<algorithm> using namespace std; int n, x, y; int pre[100005]; int main() {int l, r;cin >> n >> x >> y;for (int i = 1; i <= n; ++i){cin >> pre[i];if (pre[i] == x)l = i;if (pre[i] == y)r = i;}if (l > r)swap(l, r);int xx = 0, yy = n + 1;while (r - l != xx - yy){for (int i = l; i <= r; ++i){xx = max(xx, pre[i]);yy = min(yy, pre[i]);}for (int i = 1; i <= n; ++i){if (pre[i] > yy&&pre[i] < xx&&i < l)l = i;if (pre[i]>yy&&pre[i]<xx&&i>r)r = i;}}cout << l << " "<<r << endl; }
?