#include<stdio.h> #include<utility> #include<map> using namespace std; int n,m; int ac(map<int,int>zm[],int numdz,int pomiar){ map<int,int>::iterator it=zm[pomiar].lower_bound(numdz); if(it->first!=numdz)it--; return it->second; } map<int,int>al; void alfinc(int id){ if(al.count(id)==0){ al[id]=1; }else{ al[id]++; } } void alfdec(int id){ al[id]--; } void sumalf(){ map<int,int>::iterator it=al.begin(),it_p=al.begin(); for(it++;it!=al.end();it++){ it->second=it->second+it_p->second; it_p++; } } void sor(map<int,int>zm[]) { int a[m]; int b[m]; for(int i=0;i<m;i++)a[i]=i; for(int k=n-1;k>=0;k--){ al.clear(); for(int j=0;j<m;j++)alfinc(ac(zm,a[j],k)); sumalf(); for(int j=m-1;j>=0;j--){ b[al[ac(zm,a[j],k)]-1] =a[j]; alfdec(ac(zm,a[j],k)); } for(int i=0;i<m;i++)a[i]=b[i]; } for(int i=0;i<m;i++)printf("%d ",a[i]+1); printf("\n"); } int main(){ scanf("%d %d",&n,&m); map<int,int> zm[n]; for(int i=0;i<n;i++){ int a; scanf("%d",&a); zm[i].insert(make_pair(0,a)); } for(int i=0;i<m-1;i++){ int a,b; scanf("%d %d",&a,&b); zm[a-1].insert(make_pair(i+1,b)); } sor(zm); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include<stdio.h> #include<utility> #include<map> using namespace std; int n,m; int ac(map<int,int>zm[],int numdz,int pomiar){ map<int,int>::iterator it=zm[pomiar].lower_bound(numdz); if(it->first!=numdz)it--; return it->second; } map<int,int>al; void alfinc(int id){ if(al.count(id)==0){ al[id]=1; }else{ al[id]++; } } void alfdec(int id){ al[id]--; } void sumalf(){ map<int,int>::iterator it=al.begin(),it_p=al.begin(); for(it++;it!=al.end();it++){ it->second=it->second+it_p->second; it_p++; } } void sor(map<int,int>zm[]) { int a[m]; int b[m]; for(int i=0;i<m;i++)a[i]=i; for(int k=n-1;k>=0;k--){ al.clear(); for(int j=0;j<m;j++)alfinc(ac(zm,a[j],k)); sumalf(); for(int j=m-1;j>=0;j--){ b[al[ac(zm,a[j],k)]-1] =a[j]; alfdec(ac(zm,a[j],k)); } for(int i=0;i<m;i++)a[i]=b[i]; } for(int i=0;i<m;i++)printf("%d ",a[i]+1); printf("\n"); } int main(){ scanf("%d %d",&n,&m); map<int,int> zm[n]; for(int i=0;i<n;i++){ int a; scanf("%d",&a); zm[i].insert(make_pair(0,a)); } for(int i=0;i<m-1;i++){ int a,b; scanf("%d %d",&a,&b); zm[a-1].insert(make_pair(i+1,b)); } sor(zm); return 0; } |