HDU1506

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1506

题意很简单。

然后这个做法:左右扫+迭代的过程很巧妙

向左扫:  for (int i=1;i<=n;i++)

       while  (a[l[i]-1]>=a[i])// 重点

       l[i]=l[l[i]-1]; 

   向右扫:    for (int i=n;i>=1;i--)

        while (a[r[i]+1]>=a[i])

        r[i]=r[r[i]+1]; 

       提供几个样例:

    

 

4 2 2 5 5 结果10
6 2 5 2 5 5 2  结果12
加强版题目:在矩阵中求最大矩形面积HDOJ 1505
再套一成循环:
 for (int i=1;i<=n;i++)
        {
         for (int j=1;j<=m;j++)
          {
          char s[10];
          scanf("%s",s);
          if (s[0]=='R') p[j]=0;
          else p[j]++;
       }

        for (int i=1;i<=m;i++)
        l[i]=r[i]=i;
        p[0]=p[m+1]=-1;
        for (int i=1;i<=m;i++)
        while (p[l[i]-1]>=p[i]) l[i]=l[l[i]-1];
        for (int i=m;i>=1;i--)
        while (p[r[i]+1]>=p[i]) r[i]=r[r[i]+1];

        for (int i=1;i<=m;i++)
         ans=max(ans,(r[i]-l[i]+1)*p[i]);
       }

 

 

posted on 2013-12-27 22:16  forgot93  阅读(227)  评论(0编辑  收藏  举报

导航