【贪心】峰顶的值只与连续的上升相关,所以正向遍历一遍找<,再反向遍历一遍找>,将两次的结果取最大值即可。
#include<bits/stdc++.h>
using namespace std;
const int m = 1001;
int a[m], b[m];
int main() {
int n;
string s;
cin >> n >> s;
for (int i = 0; i < n; i++) a[i] = b[i] = 1;
for (int i = 1; i < n; i++) {
char c = s[i - 1];
if (c == '<') a[i] = a[i - 1] + 1;
else if (c == '=') a[i] = a[i - 1];
}
for (int i = n - 2; i >= 0; i--) {
char c = s[i];
if (c == '>') b[i] = b[i + 1] + 1;
else if (c == '=') b[i] = b[i + 1];
}
for (int i = 0; i < n; i++) {
a[i] = max(a[i], b[i]);
cout << a[i] << " ";
}
}