JZOJ [4820]. 【NOIP2016提高A组模拟10.15】最大化
2016-10-15 16:27
483 查看
Description
Input
Output
Sample Input
样例输入1:
3 2
4 0
-10 8
-2 -2
Sample Output
样例输出1:
4
Data Constraint
即先确定两边,再处理行。
我们可以得到前i行l~r的总和。记为si
我们可以用前缀和来弄。
如果si>sj且i>j则(i-j)*(r-l+1)可以更新答案
维护单调递减栈
用一个数组f记录j
每次在其中二分找j
复杂度是O(n3log)
Input
Output
Sample Input
样例输入1:
3 2
4 0
-10 8
-2 -2
Sample Output
样例输出1:
4
Data Constraint
The Solution
先n^2枚举矩形的左右两边l,r,然后在行上找最值即先确定两边,再处理行。
我们可以得到前i行l~r的总和。记为si
我们可以用前缀和来弄。
如果si>sj且i>j则(i-j)*(r-l+1)可以更新答案
维护单调递减栈
用一个数组f记录j
每次在其中二分找j
复杂度是O(n3log)
CODE
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define fo(i,a,b) for (int i=a;i<=b;i++) #define N 405 #define INF 1000000000 using namespace std; typedef long long ll; int n,m,top; ll a ,Stack ,Pre ,f ,ans = 0; int Find(ll x) { int l = 1, r = top,res = -1; while (l <= r) { int mid = (l + r) >> 1; if (Stack[mid] < x) res = mid , r = mid - 1; else l = mid + 1; } return res; } void Work(int x,int y) { top = 0; fo(i,1,n) Pre[i] += a[i][y]; Stack[0] = INF; ll sum = 0; fo(i,1,n) { sum += Pre[i]; if (sum > 0) ans = max(ans,(ll)i * (y-x+1)); else { int t = Find(sum); if (t != -1) ans = max(ans,(ll)(i-f[t]) * (y-x+1)); } if (sum < Stack[top]) Stack[++ top] = sum,f[top] = i; } } int main() { freopen("max.in","r",stdin); freopen("max.out","w",stdout); scanf("%d%d",&n,&m); fo(i,1,n) fo(j,1,m) scanf("%lld",&a[i][j]); fo(i,1,m) { fill(Pre,Pre+1+N,0); fo(j,i,m) Work(i,j); } printf("%lld\n",ans); return 0; }
相关文章推荐
- {题解}[jzoj4820]【NOIP2016提高A组模拟10.15】最大化
- 【JZOJ4820】【NOIP2016提高A组模拟10.15】最大化
- JZOJ 4820 【NOIP2016提高A组模拟10.15】最大化
- JZOJ 4820. 【NOIP2016提高A组模拟10.15】最大化
- JZOJ 4819. 【NOIP2016提高A组模拟10.15】算循环
- JZOJ 4821 【NOIP2016提高A组模拟10.15】打膈膜
- 【NOIP2016提高A组模拟10.15】最大化
- {题解}[jzoj4821]【NOIP2016提高A组模拟10.15】打膈膜
- JZOJ 4819 【NOIP2016提高A组模拟10.15】算循环
- 【JZOJ4819】【NOIP2016提高A组模拟10.15】算循环
- JZOJ 4821. 【NOIP2016提高A组模拟10.15】打膈膜
- 【NOIP2016提高A组模拟10.15】最大化
- 【NOIP2016提高A组模拟10.15】最大化
- JZOJ 4777. 【NOIP2016提高A组模拟9.14】灌水
- 【JZOJ4804】【NOIP2016提高A组模拟9.28】成绩调研
- 【NOIP2016提高A组模拟10.15】打膈膜
- JZOJ4735【NOIP2016提高A组模拟8.24】最小圈 Spfa深搜判负环
- 【NOIP2016提高A组模拟10.15】打膈膜
- 【JZOJ4772】【NOIP2016提高A组模拟9.9】运输妹子