正文

Zju 1985 Largest Rectangle in a Histogra2006-07-27 00:11:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cruxd/16849.html

分享到:

tle了我几个月.......谢谢cqf大牛的算法。 //State: 0.22s 1512kb //用l,r两个数组保存当前元素向左向右访问能够达到的最大下标,因此可用dp //另:此题甚bt,数据量大的惊人,而且有陷阱,必须用scanf。我用cin的时候起码读了10s......... #include <cstdio> int a[100000], l[100000], r[100000], n; int main(){ freopen("in.txt", "r", stdin); while(scanf("%d", &n) && n) {  int i;  double max = 0.00;  for(i = 0; i < n; i ++)  {   scanf("%d", &a[i]);       }  for(i = 0; i < n; i ++)  {   l[i] = i;   while(l[i] > 0 && a[i] <= a[l[i] - 1])   {    l[i] = l[l[i] - 1];   }     }  //pl();  for(i = n - 1; i >= 0; i --)  {   r[i] = i;   while(r[i] < n - 1 && a[i] <= a[r[i] + 1])   {    r[i] = r[r[i] + 1];   }   double t = double((r[i] - l[i] + 1) * double(a[i]));   if(max < t)    max = t;  }  //pr();  printf("%0.0f\n", max); } return 0;}

阅读(4488) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册