This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define int long long
#define quick ios::sync_with_stdio(0);cin.tie(0);
#define rep(x,a,b) for(int x=a;x<=b;x++)
#define repd(x,a,b) for(int x=a;x>=b;x--)
#define lowbit(x) (x&-x)
#define sz(x) (int)(x.size())
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define mp make_pair
#define eb emplace_back
using namespace std;
typedef pair<int,int> pii;
void debug(){
cout<<"\n";
}
template<class T,class ...U>
void debug(T a,U ...b){
cout<<a<<" ",debug(b...);
}
const int N=5e4+7;
const int INF=1e18;
struct quest{
int lx,rx,ly,ry,cnt;
quest(int a,int b,int c,int d,int e) : lx(a),rx(b),ly(c),ry(d),cnt(e){
}
};
quest operator + (quest &a,quest &b){
return quest(min(a.lx,b.lx),max(a.rx,b.rx),min(a.ly,b.ly),max(a.ry,b.ry),a.cnt+b.cnt);
}
vector<quest> ans[N];
vector<int> v[N];
pii mv[4]={mp(0,1),mp(0,-1),mp(1,0),mp(-1,0)};
pii pos[N];
bool ok(quest &q){
return (q.rx-q.lx+1)*(q.ry-q.ly+1)==q.cnt;
}
signed main(){
quick
int h,w;
cin>>h>>w;
vector<vector<int>> c(h,vector<int>(w));
vector<int> idx;
rep(i,0,h-1){
rep(j,0,w-1){
cin>>c[i][j];
idx.eb(c[i][j]);
}
}
sort(all(idx));
rep(i,0,h-1){
rep(j,0,w-1){
c[i][j]=lower_bound(all(idx),c[i][j])-idx.begin();
pos[c[i][j]]=mp(i,j);
}
}
rep(i,0,h-1){
rep(j,0,w-1){
for(pii p2:mv){
int x=p2.F+i;
int y=p2.S+j;
if(x>=0&&x<h&&y>=0&&y<w&&c[x][y]>c[i][j]){
v[c[i][j]].eb(c[x][y]);
}
}
}
}
int num=0;
rep(i,0,h*w-1){
ans[i].eb(quest(pos[i].F,pos[i].F,pos[i].S,pos[i].S,1));
rep(j,0,sz(ans[i])-2){
ans[i][j]=ans[i][j]+ans[i].back();
}
for(quest &q:ans[i]){
if(ok(q)) num++;
for(int j:v[i]) ans[j].eb(q);
}
}
cout<<num<<"\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |