题意:
给你一个长度为n的序列,问你这个序列中长度最长的等差数列长度为多少
题解:
代码:
#include <bits/stdc++.h> #define eps 1e-8 #define INF 0x3f3f3f3f #define PI acos(-1) #define lson l,mid,rt<<1 #define rson mid+1,r,(rt<<1)+1 #define CLR(x,y) memset((x),y,sizeof(x)) #define fuck(x) cerr << #x << "=" << x << endl using namespace std; typedef long long ll; typedef unsigned long long ull; const int seed = 131; const int maxn = 1e5 + 5; const int mod = 1e9 + 7; int n; ll a[maxn]; int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%lld", &a[i]); sort(a + 1, a + 1 + n); int ans = 2; for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { ll d = a[j] - a[i]; ll nxt = d + a[j]; int num = 2; int k = j; while (1) { k = lower_bound(a + k + 1, a + 1 + n, nxt) - a; if (a[k] != nxt) break; nxt += d; num++; } ans = max(ans, num); } } printf("%d\n", ans); return 0; }