1 条题解
-
0
#include<bits/stdc++.h> using namespace std; #define int long long const int N=510; int a[N][N],s[N][N],d[N][N],n;stack<pair<int,int>>stk; int solve(int x) { memset(d,0,sizeof(d));memset(s,0,sizeof(s)); for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)d[i][j]=(a[i][j]>=x); for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)s[i][j]=d[i][j]?s[i-1][j]+1:0; int ans=0; for(int i=1;i<=n;i++) { while(!stk.empty())stk.pop(); int num=0; for(int j=1;j<=n;j++) { int sum=1; while(!stk.empty()&&stk.top().first>=s[i][j]) sum+=stk.top().second,num-=stk.top().first*stk.top().second,stk.pop(); if(s[i][j]==0)continue; num+=sum*s[i][j];stk.push({s[i][j],sum}); ans+=num; } } return ans; } signed main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>a[i][j]; int ans=solve(100),ans1=solve(101); int ans2=ans-ans1; cout<<ans2; return 0; }
- 1
信息
- ID
- 7054
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 101
- 已通过
- 8
- 上传者