Submission #1231602

#TimeUsernameProblemLanguageResultExecution timeMemory
1231602TadijaSebezSandcastle 2 (JOI22_ho_t5)C++20
15 / 100
5094 ms1152 KiB
#include <bits/stdc++.h> using namespace std; int mv[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; int main(){ int n,m; scanf("%i %i",&n,&m); vector<vector<int>> a(n+1,vector<int>(m+1,0)); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%i",&a[i][j]); } } if(n>m){ vector<vector<int>> tmp(m+1,vector<int>(n+1,0)); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ tmp[j][i]=a[i][j]; } } a=tmp; swap(n,m); } vector<vector<int>> in(n+1,vector<int>(m+1,0)); vector<int> cnt(5,0); int ans=0; for(int xl=1;xl<=n;xl++){ for(int xr=xl;xr<=n;xr++){ for(int yl=1;yl<=m;yl++){ for(int yr=yl;yr<=m;yr++){ auto InRange=[&](int x,int y){ return x>=xl && x<=xr && y>=yl && y<=yr; }; auto Add=[&](int x,int y){ array<int,3> mx={0,0,0}; for(int i=0;i<4;i++){ int nx=x+mv[i][0]; int ny=y+mv[i][1]; if(InRange(nx,ny) && a[nx][ny]<a[x][y]){ mx=max(mx,{a[nx][ny],nx,ny}); } } if(mx[0]!=0){ cnt[in[mx[1]][mx[2]]]--; in[mx[1]][mx[2]]++; cnt[in[mx[1]][mx[2]]]++; } }; auto Upd=[&](int x,int y){ yr--; array<int,3> mx={0,0,0}; for(int i=0;i<4;i++){ int nx=x+mv[i][0]; int ny=y+mv[i][1]; if(InRange(nx,ny) && a[nx][ny]<a[x][y]){ mx=max(mx,{a[nx][ny],nx,ny}); } } yr++; if(mx[0]!=0){ cnt[in[mx[1]][mx[2]]]--; in[mx[1]][mx[2]]--; cnt[in[mx[1]][mx[2]]]++; } Add(x,y); }; cnt[0]+=xr-xl+1; for(int i=xl;i<=xr;i++){ Add(i,yr); if(yr!=yl){ Upd(i,yr-1); } } int sz=(xr-xl+1)*(yr-yl+1); if(cnt[0]==1 && cnt[1]==sz-1){ ans++; } } for(int yr=yl;yr<=m;yr++){ for(int i=xl;i<=xr;i++){ in[i][yr]=0; } } cnt=vector<int>(5,0); } } } printf("%i\n",ans); return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:7:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 |     scanf("%i %i",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~~
Main.cpp:11:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 |             scanf("%i",&a[i][j]);
      |             ~~~~~^~~~~~~~~~~~~~~
#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...