// Author: Teoman Ata Korkmaz
#include <bits/stdc++.h>
#define int int_fast64_t
using namespace std;
constexpr int N=1e6+6;
///////////////////////////////////////////////////////////
int n,m,p[N],ptr[N],cnt[N],ans=-1,vis[N];
vector<int> v[N];
vector<vector<int>> r,u;
signed main(void){
fill(ptr,ptr+N,0);
cin>>n>>m;
r.resize(n,vector<int>(m));
u.resize(n,vector<int>(m));
for(auto& _:r)for(auto& i:_)cin>>i;
for(auto& _:u)for(auto& i:_)cin>>i;
u.push_back(vector<int>(m,0));
for(int j=0;j<m;j++){
v[j].resize(n);
iota(v[j].begin(),v[j].end(),0);
sort(v[j].begin(),v[j].end(),[&](int a,int b){
return r[a][j]<r[b][j];
});
}
/*for(int j=0;j<m;j++){
cerr<<"v:";
for(auto i:v[j])cerr<<i<<",";
cerr<<endl;
}*/
queue<int> q;
q.push(n);
while(q.size()){
int ind=q.front();q.pop();
//cerr<<"q:"<<ind<<endl;
ans++;
for(int j=0;j<m;j++)p[j]+=u[ind][j];
for(int j=0;j<m;j++){
while(ptr[j]<n && r[v[j][ptr[j]]][j]<=p[j]){
cnt[v[j][ptr[j]]]++;
if(cnt[v[j][ptr[j]]]==m)q.push(v[j][ptr[j]]);
ptr[j]++;
}
}
//cerr<<"ptr:";for(int i=0;i<m;i++)cerr<<ptr[i]<<",";cerr<<endl;
//cerr<<"cnt:";for(int i=0;i<n;i++)cerr<<cnt[i]<<",";cerr<<endl;
}
cout<<ans<<endl;
}
# | 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... |