Submission #565668

#TimeUsernameProblemLanguageResultExecution timeMemory
565668shrimbXylophone (JOI18_xylophone)C++17
47 / 100
79 ms300 KiB
#pragma GCC optimize ("Ofast")
#pragma GCC target ("avx,avx2,fma")

#include "xylophone.h"
#include"bits/stdc++.h"
using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template<class x>
using ordered_set = tree<x, null_type,less<x>, rb_tree_tag,tree_order_statistics_node_update>;

// #define int long long
#define endl '\n'
#define mod 1000000007
//\
#define mod 1686876991

const int maxn = 5001;
int nn;

int SET (int d, int a, bool inc) {
    int ret;
    if (inc) ret =  a + d;
    else ret = a - d;
    if (ret < 1 ||  ret > nn) return -1;
    return ret;
}

void solve (int n) {
    nn=n;
    int l = 1, r = n;
    while (r - l > 1) {
        int m = (l + r) / 2;
        if (query(m, n) == n - 1) l = m;
        else r = m;
    }
    int L = l;
    int A[n + 1];
    memset(A, -1, sizeof A);
    A[L] = 1;
    int dif = 0, inc = 1;
    for (int i = L - 1 ; i >= 1 ; i--) {
        int d = query(i, i + 1);
        if (i == L - 1) {
            A[i] = 1 + d;
            continue;
        }

        if (A[i + 1] < A[i + 2]) {
            if (query(i, i + 2) == d + A[i + 2] - A[i + 1]) {
                A[i] = A[i + 1] - d;
            } else {
                A[i] = A[i + 1] + d;
            }
        } else {
            if (query(i, i + 2) == d + A[i + 1] - A[i + 2]) {
                A[i] = A[i + 1] + d;
            } else {
                A[i] = A[i + 1] - d;
            }
        }
    }
    for (int i = L + 1 ; i <= n ; i++) {
        int d = query(i - 1, i);
        if (i == L + 1) {
            A[i] = 1 + d;
            continue;
        }

        if (A[i - 1] < A[i - 2]) {
            if (query(i - 2, i) == d + A[i - 2] - A[i - 1]) {
                A[i] = A[i - 1] - d;
            } else {
                A[i] = A[i - 1] + d;
            }
        } else {
            if (query(i - 2, i) == d + A[i - 1] - A[i - 2]) {
                A[i] = A[i - 1] + d;
            } else {
                A[i] = A[i - 1] - d;
            }
        }
    }
    // for (int i = 1 ; i <= n ; i++) cerr << A[i] << " ";
    for (int i = 1 ; i <= n ; i++) answer(i, A[i]);
}

Compilation message (stderr)

xylophone.cpp:18:1: warning: multi-line comment [-Wcomment]
   18 | //\
      | ^
xylophone.cpp: In function 'void solve(int)':
xylophone.cpp:44:9: warning: unused variable 'dif' [-Wunused-variable]
   44 |     int dif = 0, inc = 1;
      |         ^~~
xylophone.cpp:44:18: warning: unused variable 'inc' [-Wunused-variable]
   44 |     int dif = 0, inc = 1;
      |                  ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...