双向排序(蓝桥杯21I)

双向排序(蓝桥杯21I)_第1张图片

#include 
#include
using namespace std;
typedef struct PLL {
    int first;
    int second;
}PLL;
bool cmp1(int a, int b) {
    if (a >= b) {
        return true;
    }
    return false;
}
bool cmp2(int a, int b) {
    if (a <= b) {
        return true;
    }
    return false;
}
int main()
{
    int n, m;
    cin >> n >> m;
    cout << endl;
    int* arr = new int[n + 1];
    PLL act[100];
    for (int i = 1; i <= n; i++) {
        arr[i] = i;
    }
    int p,q,tp,tq,sum = 0,cnt = 0,start_pos;
    for (int i = 0; i < m;i++) {
        act[cnt] = {-1,-1};
    }
    for (int i = 0; i < m; i++) {
        cin >> p >> q;
        if (p  == 0) {
            act[cnt] = {p,q};
            cnt++;
            tp = p; 
            tq = q;
            start_pos = i;
            break;
        }
    }
    for (int i = start_pos + 1; i < m;i++) {
        cin >> p >> q;
        if (tp == p) {
            cnt--;
            if (p == 0) {
                q = max(tq, q);
                act[cnt] = {p,q};
            }
            else if(p == 1){
                q = min(tq, q);
                act[cnt] = {p,q};
            }
            cnt++;
        }
        else {
            act[cnt] = {p,q};
            cnt++;
        }
        tp = p;
        tq = q;
    }
    for (int i = 0; i < cnt; i++) {
        if (act[i].first == 0) {
            sort(arr + 1, arr + act[i].second + 1, cmp1);
        }
        else {
            sort(arr + act[i].second, arr + n + 1, cmp2);
        }
    }
    for (int i = 1; i <= n; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}
#include 
#include
using namespace std;
bool down(int a, int b) {
    return a > b;
};
bool up(int a, int b) {
    return a< b;
};
int main()
{
    int *a=NULL;
    int m, n;
    cin >> m >> n;
    a = new int[m];
    for (int i = 0; i < m; i++)
        a[i] = i + 1;
    int x = 0, y = 0;
    for (int i = 0; i < n; i++) {
        cin >> x >> y;
        if (x == 1)
            sort(a + y-1, a + m, up);
        else
            sort(a, a + y, down);
    }
    for (int i = 0; i < m; i++)
        cout << a[i] << " ";
    delete a;
    return 0;
}

你可能感兴趣的:(蓝桥杯,算法,职场和发展)