#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
struct Seg{
int n;
vector<int>tree;
void init(int N){
n=N;
tree.clear();
tree.resize(n<<1,0);
}
int l,r;
void up(int node=1,int left=0,int right=-1){
if(right==-1)right=n-1;
if(left==right){
tree[node]++;
return;
}
if(l>mid)up(node*2+1,mid+1,right);
else up(node*2,left,mid);
tree[node]=min(tree[node*2],tree[node*2+1]);
}
void update(int tar){
l=tar;
up();
}
};
int n,s,t;
int cnt[100023],per[100023];
map<int,int>mp[100023];
vector<int>ans[100023];
vector<int>ek;
Seg seg[100023];
int main(){
ios_base::sync_with_stdio(23^23);cin.tie(NULL);
cin>>n>>s>>t;
for(int i=0;i<n;i++){
seg[i].init(s);
ans[i].resize(s,0);
for(int j=0;j<s;j++){
int x;cin>>x;
x--;
mp[x][i]++;
cnt[x]++;
}
}
for(int i=0;i<t;i++){
per[i]=i;
}
sort(per,per+t,[&](const int &x,const int &y){
return cnt[x]<cnt[y];
});
int bas=0;
Seg seg2;
for(int i=0;i<t;i++){
seg2.init(s);
for(int j=1;cnt[per[i]]>=s;j++,bas++){
for(int pos=bas-1;seg2.tree[1]<j;){
auto itr=mp[per[i]].upper_bound(pos);
if(itr==mp[per[i]].end()){
itr=mp[per[i]].begin();
}
pos=itr->fr;
while(itr->sc&&seg2.tree[1]<j){
int node=1,left=0,right=s-1;
while(left!=right){
if(seg2.tree[node*2+1]==j||seg[pos].tree[node*2+1]){
node*=2;
right=mid;
}
else{
node*=2;node++;
left=mid+1;
}
}
if(seg[pos].tree[node]||seg2.tree[node]==j)break;
itr->sc--;
cnt[per[i]]--;
seg2.update(left);
ans[pos][left]=per[i]+1;
seg[pos].update(left);
}
if(!itr->sc)mp[per[i]].erase(itr);
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<s;j++){
cout<<ans[i][j]<<" ";
}
cout<<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... |
| # | 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... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |