UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#214274#2022. anodgdCompile Error//C++2.0kb2024-11-16 22:24:002024-11-16 23:14:22

answer

#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 32000 + 5;

int N, a[MAX_N], b[MAX_N];
vector<pair<int,int>> op;

void solve_2(int l, int r, int x) {
    if (l == r) return;
    int m = l + r >> 1;
    solve_2(l, m, x);
    solve_2(m + 1, r, x);
    int p = m, q = m + 1;
    for (; p >= l && a[p] > x; p --);
    for (; q <= r && a[q] <= x; q ++);
    // printf("  l=%d,r=%d, p=%d,q=%d\n", l, r, p, q);
    if (p < m && q > m + 1) {
        // printf("    +[%d,%d]\n", p + 1, q - 1);
        reverse(a + p + 1, a + q);
        op.push_back(make_pair(p + 1, q - 1));
    }
}

void solve_1(int l, int r) {
    if (l == r) return;
    int m = l + r >> 1;
    solve_2(l, m, b[m]);//左边找>b[m]的,放结尾
    solve_2(m + 1, r, b[m + 1] - 1);//右边找<b[m]的,放开头
    int p = m, q = m + 1;
    for (; p >= l && a[p] > b[m]; p --);
    for (; q <= r && a[q] < b[m + 1]; q ++);
    // printf("l=%d,r=%d, p=%d,q=%d\n", l, r, p, q);
    // for (int i = 1; i <= N; i ++) printf("%d%c", a[i], i < N ? ' ' : '\n');
    // for (int i = l; i <= p; i ++) assert(a[i] <= b[m]);
    // for (int i = r; i >= q; i --) assert(a[i] >= b[m + 1]);
    if (p + 1 < q - 1) {
        reverse(a + p + 1, a + q);
        // printf("  +[%d,%d]\n", p + 1, q - 1);
        op.push_back(make_pair(p + 1, q - 1));
    }
    // for (int i = l; i <= m; i ++) assert(a[i] <= b[m]);
    // for (int i = r; i > m; i --) assert(a[i] >= b[m]);
    solve_1(l, m);
    solve_1(m + 1, r);
}

int main() {
    scanf("%d", &N);
    for (int i = 1; i <= N; i ++) {
        scanf("%d", &a[i]);
    }
    // N = 32000;
    // for (int i = 1; i <= N; i ++) {
    //     a[i] = N + 1 - i;
    // }
    for (int i = 1; i <= N; i ++) {
        b[i] = a[i];
    }
    sort(b + 1, b + 1 + N);
    solve_1(1, N);

    printf("%d\n", (int)op.size());
    long long s = 0;
    for (auto t: op) {
        printf("%d %d\n", t.first, t.second);
        s += t.second - t.first + 1;
    }
    fprintf(stderr, "s=%lld\n", s);
    return 0;
}

详细

answer.code:8:20: error: '>>' should be '> >' within a nested template argument list
 vector<pair<int,int>> op;\x0d
                    ^
answer.code: In function 'int main()':
answer.code:66:15: error: 't' does not name a type
     for (auto t: op) {\x0d
               ^
answer.code:70:5: error: expected ';' before 'fprintf'
     fprintf(stderr, "s=%lld\n", s);\x0d
     ^
answer.code:71:5: error: expected primary-expression before 'return'
     return 0;\x0d
     ^
answer.code:71:5: error: expected ')' bef...