POJ 3494 升级版,算三遍就可以了。
#include#include #include #include using namespace std;const int maxn=1000+10;int a[maxn];int L[maxn],R[maxn];int m,n;int tmp[maxn][maxn],b[maxn][maxn];char s[maxn][maxn];void f(){ for(int i=1; i<=n; i++) L[i]=i; for(int i=2; i<=n; i++) { if(a[i]>a[i-1]) continue; int pre=L[i-1]; while(1) { L[i]=pre; if(pre==1||a[pre-1] =1; i--) R[i]=i; for(int i=n-1; i>=1; i--) { if(a[i]>a[i+1]) continue; int pre=R[i+1]; while(1) { R[i]=pre; if(pre==n||a[pre+1]