Submission #165793

#TimeUsernameProblemLanguageResultExecution timeMemory
165793muhi1112Strah (COCI18_strah)C++17
0 / 110
674 ms8312 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define f1 first #define s2 second #define pb push_back #define mp make_pair #define ll long long #define fri(a) freopen(a,"r",stdin); #define fro(a) freopen(a,"w",stdout); const int N=2e3+5; int n,m,hist[N],seg[4*N]; char grid[N][N]; ll dpf(ll i,ll j){ //cout<<"i = "<<i<<" j = "<<j<<endl; return ((i+1)*(j+1)*i*j)/4; } void build(int v,int tl,int tr){ if(tl == tr){ seg[v] = tl; } else{ int tm = (tl+tr)/2; build(v*2,tl,tm); build(v*2+1,tm+1,tr); seg[v]=(hist[seg[v*2]] < hist[seg[v*2+1]] ? seg[v*2] : seg[v*2+1]); } } ll query(int v,int tl,int tr,int l,int r){ if(l > r)return -1; if(l==tl && r==tr)return seg[v]; else{ int tm = (tl+tr)/2; ll left = query(v*2,tl,tm,l,min(r,tm)); ll right = query(v*2+1,tm+1,tr,max(l,tm+1),r); if(left == -1)return right; if(right == -1)return left; return hist[left] < hist[right] ? left : right; } } ll solve1(int i,int j){ if(i==j)return dpf(1,hist[query(1,1,m,i,j)]); if(i>j)return 0; int k=query(1,1,m,i,j); //cout<<i<<" "<<j<<" "<<k<<endl; ll ans=dpf(hist[k],j-i+1); return ans+=solve1(i,k)+solve1(k+2,j); } ll solve(){ ll ans=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(grid[i][j]=='#'){ hist[j]=0; } else hist[j]++; } memset(seg,-1,sizeof(seg)); build(1,0,m-1); ans+=solve1(1,m); //cout<<ans<<endl; } return ans; } int main(){ //fri("in.txt"); //fro("out.txt"); ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>m; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>grid[i][j]; } } cout<<solve()<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...