Submission #155476

#TimeUsernameProblemLanguageResultExecution timeMemory
155476vanicRectangles (IOI19_rect)C++14
Compilation error
0 ms0 KiB
#include <cstdio> #include <vector> #include <algorithm> #include <set> #include <queue> using namespace std; const int maxn=2505, Log=12; int n, m; int l[maxn][maxn]; vector < int > r[maxn][maxn], c[maxn][maxn]; pair < int, int > red[maxn][maxn], stup[maxn][maxn]; void upd(int x, bool p){ deque < pair < int, int > > q; int sz; if(p){ sz=m; } else{ sz=n; } for(int i=0; i<sz; i++){ if(p){ while(!q.empty() && q.back().first<=l[x][i]){ q.pop_back(); } } else{ while(!q.empty() && q.back().first<=l[i][x]){ q.pop_back(); } } if(!q.empty()){ if(p){ red[x][i].first=q.back().second+1; } else{ stup[i][x].first=q.back().second+1; } } else{ if(p){ red[x][i].first=0; } else{ stup[i][x].first=0; } } if(p){ q.push_back(make_pair(l[x][i], i)); } else{ q.push_back(make_pair(l[i][x], i)); } } while(!q.empty()){ q.pop_back(); } for(int i=sz-1; i>-1; i--){ if(p){ while(!q.empty() && q.back().first<=l[x][i]){ q.pop_back(); } } else{ while(!q.empty() && q.back().first<=l[i][x]){ q.pop_back(); } } if(!q.empty()){ if(p){ red[x][i].second=q.back().second-1; r[red[x][i].first][red[x][i].second].push_back(x); } else{ stup[i][x].second=q.back().second-1; c[stup[i][x].first][stup[i][x].second].push_back(x); } } else{ if(p){ red[x][i].second=sz-1; r[red[x][i].first][red[x][i].second].push_back(x); } else{ stup[i][x].second=sz-1; c[stup[i][x].first][stup[i][x].second].push_back(x); } } if(p){ q.push_back(make_pair(l[x][i], i)); } else{ q.push_back(make_pair(l[i][x], i)); } } } int binary(int x, vector < int > &l){ int lo=0, hi=l.size()-1, mid; while(lo<hi){ mid=(lo+hi)/2; if(l[mid]<x){ lo=mid+1; } else{ hi=mid; } } return lo; } bool provjeri(int x, int y){ int r1, r2, c1, c2; r1=red[x][y].first; r2=red[x][y].second; c1=stup[x][y].first; c2=stup[x][y].second; if(r1==0 || c1==0 || r2==m-1 || c2==n-1){ return 0; } int pos1=binary(c1, r[r1][r2]); int pos2=binary(r1, c[c1][c2]); /* printf("novi\n"); printf("%d %d\n", x, y); printf("%d %d\n", r1, r2); printf("%d %d\n", c1, c2); printf("%d %d\n", pos1, pos2); for(int i=0; i<r[r1][r2].size(); i++){ printf("%d ", r[r1][r2][i]); } printf("\n"); for(int i=0; i<c[c1][c2].size(); i++){ printf("%d ", c[c1][c2][i]); } printf("\n");*/ if(r[r1][r2][pos1]==c1 && r[r1][r2].size()-pos1-c2+c1-1>=0 && r[r1][r2][pos1+c2-c1]==c2 && c[c1][c2][pos2]==r1 && c[c1][c2].size()-pos2-r2+r1-1>=0 && c[c1][c2][pos2+r2-r1]==r2){ // printf("cudo\n"); return 1; } return 0; } int main(){ scanf("%d%d", &n, &m); for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ scanf("%d", &l[i][j]); } } for(int i=0; i<n; i++){ upd(i, 1); } for(int i=0; i<m; i++){ upd(i, 0); } int br=0; for(int i=1; i<n-1; i++){ for(int j=1; j<m-1; j++){ if(provjeri(i, j)){ br++; } } } printf("%d\n", br); return 0; }

Compilation message (stderr)

rect.cpp: In function 'int main()':
rect.cpp:150:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~
rect.cpp:153:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d", &l[i][j]);
    ~~~~~^~~~~~~~~~~~~~~~
/tmp/cckryMqn.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/ccHgqmH1.o:rect.cpp:(.text.startup+0x0): first defined here
/tmp/cckryMqn.o: In function `main':
grader.cpp:(.text.startup+0x89e): undefined reference to `count_rectangles(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >)'
collect2: error: ld returned 1 exit status