poj2559/hdu1506 单调栈经典题
我实在是太菜了啊啊啊啊啊
到现在连个单调栈都不会啊啊啊
写个经典题
#include<cstdio> #include<algorithm> #include<cstring> #define ll long long using namespace std; ll dp1[100010],dp2[100010]; ll h[100010]; int main() { ll n; while(scanf("%d",&n)!=EOF&&n){ memset(h,0,sizeof h); for(ll i=1;i<=n;i++){ scanf("%d",&h[i]); dp1[i]=dp2[i]=i; } dp1[0]=1; dp2[n+1]=n; h[0]=-1; h[n+1]=-1; for(ll i=1;i<=n;i++) { while(h[dp1[i]-1]>=h[i]) dp1[i]=dp1[dp1[i]-1]; } for(ll i=n;i>=1;i--) { while(h[dp2[i]+1]>=h[i]) dp2[i]=dp2[dp2[i]+1]; } ll ans=-0x3f3f3f3f; for(ll i=1;i<=n;i++) { ans=max(ans,h[i]*(dp2[i]-dp1[i]+1)); } printf("%lld\n",ans); } return 0; }
poj3494
寻找01矩阵中的最大1矩阵
同上的方法,将图预处理即可