Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cmath>
- using namespace std;
- long long int n;
- long long int* A;
- long long int* B;
- long long int* Z;
- long long int counter = 1;
- bool flag = false;
- void merge_series(long long int* A, long long int*B, long long int*Z, long long int b, long long int c, long long int e, long long int* D, long long int* C, long long int*Y)
- {
- long long int i = b, j = c + 1, k;
- for (k = b; k <= e; k++)
- if (j > e)
- {
- D[k] = A[i];
- Y[k] = Z[i];
- C[k] = B[i++];
- }
- else
- if (i > c)
- {
- D[k] = A[j];
- C[k] = B[j];
- Y[k] = Z[j++];
- }
- else
- if (A[i] >= A[j])
- {
- if (A[i] > A[j])
- {
- D[k] = A[i];
- C[k] = B[i];
- Y[k] = Z[i];
- }
- if (A[i] == A[j])
- {
- if (B[i] <= B[j])
- {
- if (B[i] < B[j])
- {
- D[k] = A[i];
- C[k] = B[i];
- Y[k] = Z[i];
- }
- if (B[i] == B[j])
- {
- if (Z[i] < Z[j])
- {
- D[k] = A[i];
- C[k] = B[i];
- Y[k] = Z[i];
- }
- else
- {
- D[k] = A[j];
- C[k] = B[j];
- Y[k] = Z[j];
- }
- }
- }
- else
- {
- D[k] = A[j];
- C[k] = B[j];
- Y[k] = Z[j];
- j++;
- flag = true;
- }
- }
- if (flag == false)
- {
- i++;
- }
- flag = false;
- }
- else
- {
- D[k] = A[j];
- Y[k] = Z[j];
- C[k] = B[j++];
- }
- }
- void merge_rec(long long int* A, long long int*B, long long int*Z, long long int b, long long int e, long long int* D, long long int* C, long long int*Y)
- {
- long long int c = (b + e) / 2;
- if (b < c)
- merge_rec(A,B,Z, b, c, D, C,Y);
- if (c + 1 < e)
- merge_rec(A, B,Z, c + 1, e, D, C, Y);
- merge_series(A, B,Z, b, c, e, D, C,Y);
- for (int i = b; i <= e; i++)
- {
- A[i] = D[i];
- B[i] = C[i];
- Z[i] = Y[i];
- }
- }
- void merge_sort(long long int* A, int n)
- {
- long long int* D = new long long int[n];
- long long int* C = new long long int[n];
- long long int* Y = new long long int[n];
- merge_rec(A, B, Z, 0, n - 1, D, C, Y);
- delete[] D;
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- cin >> n;
- A = new long long int[n];
- B = new long long int[n];
- Z = new long long int[n];
- for (int i = 0; i < n; i++)
- {
- cin >> A[i];
- cin >> B[i];
- Z[i] = counter; counter++;
- }
- merge_sort(A, n);
- for (int i = 0; i < n; i++)
- {
- //cout << A[i] << " " << B[i] << " " << Z[i] << endl;
- cout << Z[i] << " ";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement