Submission #1290688

#TimeUsernameProblemLanguageResultExecution timeMemory
1290688enzyRectangles (IOI19_rect)C++20
0 / 100
2 ms572 KiB
#include "rect.h" #include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=710; set<int>col[maxn], lin[maxn]; int v[maxn][maxn], sp[maxn][maxn]; ll count_rectangles(vector<vector<int> > a){ int n=a.size(), m=a[0].size(); vector<pair<int,pair<int,int>>>process; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ col[j+1].insert(i+1); lin[i+1].insert(j+1); col[j+1].insert(0); col[j+1].insert(maxn); lin[i+1].insert(0); lin[i+1].insert(maxn); process.push_back({a[i][j],{i+1,j+1}}); } } sort(process.begin(),process.end()); reverse(process.begin(),process.end()); ll resp=0; while(process.size()){ set<pair<pair<int,int>,pair<int,int>>>ans; int at=process.back().first; vector<pair<int,int>>aux; vector<int>att; while(process.size()&&process.back().first==at){ pair<int,int>p=process.back().second; aux.push_back(p); v[p.first][p.second]++; lin[p.first].erase(p.second); col[p.second].erase(p.first); att.push_back(p.first); process.pop_back(); } for(int x : att) for(int i=1;i<=m;i++) sp[x][i]=sp[x][i-1]+v[x][i]; for(pair<int,int> p : aux){ int x=p.first, y=p.second; int l1, l2, c1, c2; auto f=lin[x].upper_bound(y), g=col[y].upper_bound(x); l2=*g; c2=*f; f--; g--; l1=*g; c1=*f; if(l1==0||c1==0||l2==maxn||c2==maxn) continue; l1++; c1++; l2--; c2--; int qtd=c2-c1+1; bool ok=true; for(int i=l1;i<=l2;i++) if(sp[i][c2]-sp[i][c1-1]!=qtd||sp[i][c2+1]-sp[i][max(c1-2,0)]>sp[i][c2]-sp[i][c1-1]) ok=false; if(ok) ans.insert({{l1,c1},{l2,c2}}); } resp+=ans.size(); /*for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) cout << v[i][j] << " "; cout << endl; } cout << endl;*/ } return resp; }
#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...