#include <iostream> #include <algorithm> using namespace std; int main() { int n, m, maxval = 0; cin>>n>>m;//temp, children int** answers = new int*[m]; for (int i = 0; i < m; i++) { answers[i] = new int[n+1]; } for (int i = 0; i < n; i++) { cin>>answers[0][i]; if (answers[0][i] > maxval) maxval = answers[0][i]; } answers[0][n] = 1; for (int i = 1; i < m; i++) { copy(answers[i-1], answers[i-1]+n+1, answers[i]); answers[i][n] = i+1; int a, b; cin>>a>>b; answers[i][a-1] = b; if (b > maxval) maxval = b; } if (m > maxval) maxval = m; maxval++; int** persistedAnswers = new int*[m]; for (int i = 0; i < m; i++) { persistedAnswers[i] = new int[n+1]; } for (int i = 0; i < m; i++) { copy(answers[i], answers[i]+n+1, persistedAnswers[i]); } int *numbersList = new int[maxval]; fill(numbersList, numbersList+maxval, 0); int** outputList = new int*[m]; for (int i = 0; i < m; i++) { outputList[i] = new int[n+1]; } int digitBuffer; for (int j = n; j > -1; j--) { for (int i = 0; i < m; i++) { numbersList[answers[i][j]]++; } for (int i = 1; i < maxval; i++) { numbersList[i] += numbersList[i - 1]; } for (int i = m - 1; i > -1; i--) { digitBuffer = answers[i][j]; numbersList[digitBuffer]--; for (int k = 0; k < n+1; k++) { outputList[numbersList[digitBuffer]][k] = answers[i][k]; } } for (int l = 0; l < m; l++) { copy(outputList[l], outputList[l]+n+1, answers[l]); } fill(numbersList, numbersList+maxval, 0); } for (int i = 0; i < m; i++) { cout<<outputList[i][n]<<" "; } 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 69 70 71 72 73 74 75 76 | #include <iostream> #include <algorithm> using namespace std; int main() { int n, m, maxval = 0; cin>>n>>m;//temp, children int** answers = new int*[m]; for (int i = 0; i < m; i++) { answers[i] = new int[n+1]; } for (int i = 0; i < n; i++) { cin>>answers[0][i]; if (answers[0][i] > maxval) maxval = answers[0][i]; } answers[0][n] = 1; for (int i = 1; i < m; i++) { copy(answers[i-1], answers[i-1]+n+1, answers[i]); answers[i][n] = i+1; int a, b; cin>>a>>b; answers[i][a-1] = b; if (b > maxval) maxval = b; } if (m > maxval) maxval = m; maxval++; int** persistedAnswers = new int*[m]; for (int i = 0; i < m; i++) { persistedAnswers[i] = new int[n+1]; } for (int i = 0; i < m; i++) { copy(answers[i], answers[i]+n+1, persistedAnswers[i]); } int *numbersList = new int[maxval]; fill(numbersList, numbersList+maxval, 0); int** outputList = new int*[m]; for (int i = 0; i < m; i++) { outputList[i] = new int[n+1]; } int digitBuffer; for (int j = n; j > -1; j--) { for (int i = 0; i < m; i++) { numbersList[answers[i][j]]++; } for (int i = 1; i < maxval; i++) { numbersList[i] += numbersList[i - 1]; } for (int i = m - 1; i > -1; i--) { digitBuffer = answers[i][j]; numbersList[digitBuffer]--; for (int k = 0; k < n+1; k++) { outputList[numbersList[digitBuffer]][k] = answers[i][k]; } } for (int l = 0; l < m; l++) { copy(outputList[l], outputList[l]+n+1, answers[l]); } fill(numbersList, numbersList+maxval, 0); } for (int i = 0; i < m; i++) { cout<<outputList[i][n]<<" "; } return 0; } |