题目链接
题意:找最长递增连续子序列, d, d+1. 输出长度和路径。
ac代码:
#include <cstdio>
#include <string>
#include <iostream>
#include <map>
#include <cmath>
#include <cstring>
#include <queue>
#include <algorithm>
#include <iterator>
using namespace std
;
typedef long long ll
;
const ll inf
= 1e18;
const ll mx
= 3e5+7;
map
<int, int>dp
;
int a
[mx
];
int main() {
int n
, b
= 0, k
;
scanf("%d", &n
);
for (int i
= 0; i
< n
; ++i
) {
scanf("%d", &a
[i
]);
dp
[a
[i
]] = dp
[a
[i
]-1]+1;
if (dp
[a
[i
]] > b
) {
b
= dp
[a
[i
]];
k
= i
;
}
}
printf("%d\n", b
);
for (int i
= 0; i
< n
&& b
; ++i
) {
if (a
[i
] == a
[k
]-b
+1) {
b
--;
printf("%d ", i
+1);
}
}
puts("");
}
转载请注明原文地址: https://mac.8miu.com/read-516406.html