链接
理论基础
结论只需证明
∀
i
∈
[
2
,
n
−
1
]
,满足
a
[
i
]
⩽
g
c
d
(
a
[
i
−
1
]
,
a
[
i
+
1
]
)
结论只需证明\forall i\in[2,n-1],满足a[i]\leqslant gcd(a[i-1],a[i+1])
结论只需证明∀i∈[2,n−1],满足a[i]⩽gcd(a[i−1],a[i+1])
首先
∀
[
l
,
r
]
,
m
i
n
(
a
[
l
]
,
a
[
l
+
1
]
,
⋅
⋅
⋅
,
a
[
r
]
)
⩾
g
c
d
(
a
[
l
]
,
a
[
l
+
1
]
,
⋅
⋅
⋅
,
a
[
r
]
)
成立
首先\forall[l,r],min(a[l],a[l+1],···,a[r])\geqslant gcd(a[l],a[l+1],···,a[r])成立
首先∀[l,r],min(a[l],a[l+1],⋅⋅⋅,a[r])⩾gcd(a[l],a[l+1],⋅⋅⋅,a[r])成立
因为大的最小公倍数也不能超过区间最小值。
题目将不等式右侧的a[r]换成了a[r+1],这样交换后是如何变化的。
题目要求:
题目要求:
题目要求:
就是
∀
[
l
,
r
]
,
m
i
n
(
a
[
l
]
,
a
[
l
+
1
]
,
⋅
⋅
⋅
,
a
[
r
]
)
⩾
g
c
d
(
a
[
l
]
,
a
[
l
+
1
]
,
⋅
⋅
⋅
a
[
r
−
1
]
,
a
[
r
+
1
]
)
就是\forall[l,r],min(a[l],a[l+1],···,a[r])\geqslant gcd(a[l],a[l+1],···a[r-1],a[r+1])
就是∀[l,r],min(a[l],a[l+1],⋅⋅⋅,a[r])⩾gcd(a[l],a[l+1],⋅⋅⋅a[r−1],a[r+1])
首先
∀
[
l
,
r
]
,
m
i
n
(
a
[
l
]
,
⋅
⋅
⋅
a
[
r
−
1
]
,
a
[
r
+
1
]
)
⩾
g
c
d
(
a
[
l
]
,
⋅
⋅
⋅
,
a
[
r
−
1
]
,
a
[
r
+
1
]
)
首先\forall[l,r],min(a[l],···a[r-1],a[r+1])\geqslant gcd(a[l],···,a[r-1],a[r+1])
首先∀[l,r],min(a[l],⋅⋅⋅a[r−1],a[r+1])⩾gcd(a[l],⋅⋅⋅,a[r−1],a[r+1])
如果说最小值在[l,r-1]处取到的话,两式左侧均相同,成立。
如果说最小值在r+1处取到,下面左侧的较小,也成立
只需考虑在r处取到最小值的情况,不等式便化为
∀
[
l
,
r
]
,
a
[
r
]
⩾
g
c
d
(
a
[
l
]
,
a
[
l
+
1
]
,
⋅
⋅
⋅
,
a
[
r
+
1
]
)
\forall[l,r],a[r]\geqslant gcd(a[l],a[l+1],···,a[r+1])
∀[l,r],a[r]⩾gcd(a[l],a[l+1],⋅⋅⋅,a[r+1])
l
最接近
r
的时候右侧取到最大包含的数最少
g
c
d
(
a
[
r
−
1
]
,
a
[
r
+
1
]
)
l最接近r的时候右侧取到最大包含的数最少gcd(a[r-1],a[r+1])
l最接近r的时候右侧取到最大包含的数最少gcd(a[r−1],a[r+1])
只需证明
∀
r
,
a
[
r
]
⩾
g
c
d
(
a
[
r
−
1
]
,
a
[
r
+
1
]
)
只需证明\forall r,a[r]\geqslant gcd(a[r - 1],a[r+1])
只需证明∀r,a[r]⩾gcd(a[r−1],a[r+1])
证毕
证毕
证毕
实现
#include <bits/stdc++.h>
#define ll long long
#define ls (p << 1)
#define rs (p << 1 | 1)
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef pair<int, int> PII;
const int N = 2e5 + 5, p = 998244353;
int a[N];
void solve() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 2; i <= n - 1; i++) {
if (a[i] < __gcd(a[i - 1], a[i + 1])) {
cout << "Rude\n";
return;
}
}
cout << "Elegant\n";
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int T = 1;
// cin >> T;
while (T--) solve();
return 0;
}