//PRZEMYSL ASSERTY //SPRAWDZ CORNER CASE'Y, MINIMALNE I MAKSYMALNE WEJŚCIE I WYJŚCIE //MODULO = 1 #include <cstdio> #include <cstring> #include <cassert> #include <cmath> #include <algorithm> #include <queue> #define REP(i,n) for(int i=0;i<(n);++i) #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define FORD(i,a,b) for(int i=(a);i>=(b);--i) #define foreach(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i) #define all(c) (c).begin(),(c).end() #define scanf(...) scanf(__VA_ARGS__)?:0 #define e1 first #define e2 second #define mp make_pair using namespace std; typedef long long ll; typedef pair<int,int> pii; int n,m,x,v,xd,w[5001],a[5001][5001]; int main() { scanf("%d%d",&n,&m); FOR(i,1,m) w[i]=i; FOR(i,1,n) scanf("%d",&a[1][i]); FOR(i,2,m) { memcpy(a[i]+1,a[i-1]+1,sizeof(int)*n); scanf("%d%d",&x,&v); a[i][x]=v; } FORD(i,n,1) xd=i,stable_sort(w+1,w+n+1,[](int u,int v) { return a[u][xd]<a[v][xd]; }); FOR(i,1,m) printf("%d ",w[i]); }
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 | //PRZEMYSL ASSERTY //SPRAWDZ CORNER CASE'Y, MINIMALNE I MAKSYMALNE WEJŚCIE I WYJŚCIE //MODULO = 1 #include <cstdio> #include <cstring> #include <cassert> #include <cmath> #include <algorithm> #include <queue> #define REP(i,n) for(int i=0;i<(n);++i) #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define FORD(i,a,b) for(int i=(a);i>=(b);--i) #define foreach(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i) #define all(c) (c).begin(),(c).end() #define scanf(...) scanf(__VA_ARGS__)?:0 #define e1 first #define e2 second #define mp make_pair using namespace std; typedef long long ll; typedef pair<int,int> pii; int n,m,x,v,xd,w[5001],a[5001][5001]; int main() { scanf("%d%d",&n,&m); FOR(i,1,m) w[i]=i; FOR(i,1,n) scanf("%d",&a[1][i]); FOR(i,2,m) { memcpy(a[i]+1,a[i-1]+1,sizeof(int)*n); scanf("%d%d",&x,&v); a[i][x]=v; } FORD(i,n,1) xd=i,stable_sort(w+1,w+n+1,[](int u,int v) { return a[u][xd]<a[v][xd]; }); FOR(i,1,m) printf("%d ",w[i]); } |