1 条题解

  • 0
    @ 2026-2-6 11:20:47
    #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
    上传者