- 1#include 2 using namespace std;
- 3 4 const int maxn = 100000;
- 5 int p[maxn * 2 + 50],
- a[maxn * 2 + 50];
- 6 7 int main() {
- 8 int T;
- 9 scanf("%d", &T);
- 10
- while (T--) {
- 11 int n,
- len = 1,
- pos = 0,
- maxr = 0;
- 12 scanf("%d", &n);
- 13 a[0] = -1;
- a[1] = 0;
- 14
- for (int i = 0; i < n; ++i) {
- 15 scanf("%d", &a[++len]);
- 16 a[++len] = 0;
- 17
- }
- 18 int ans = 0;
- 19
- for (int i = 2; i <= len; ++i) {
- 20
- if (i < maxr) p[i] = min(p[2 * pos - i], maxr - i);
- 21
- else p[i] = 1;
- 22
- while (a[i - p[i]] == a[i + p[i]] && (a[i - p[i]] <= a[i - p[i] + 2] || !a[i - p[i]]))++p[i];
- 23
- if (i + p[i] > maxr) {
- 24 maxr = i + p[i];
- 25 pos = i;
- 26
- }
- 27 ans = max(ans, p[i] - 1);
- 28
- }
- 29 printf("%d\n", ans);
- 30
- }
- 31 32
- return 0;
- 33
- }
来源: http://www.bubuko.com/infodetail-1978015.html