답안 #884980

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
884980 2023-12-08T18:43:14 Z Mher777 Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++17
64 / 100
3000 ms 51660 KB
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <array>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <bitset>
#include <list>
#include <iterator>
#include <numeric>
#include <complex>
#include <utility>
#include <random>
#include <fstream>
using namespace std;

/* -------------------- Typedefs -------------------- */

typedef int itn;
typedef long long ll;
typedef unsigned long long ull;
typedef float fl;
typedef double db;
typedef long double ld;

/* -------------------- Usings -------------------- */

using vi = vector<int>;
using vll = vector<ll>;
using mii = map<int, int>;
using mll = map<ll, ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

/* -------------------- Defines -------------------- */

#define kap map
#define ff first
#define ss second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define mpr make_pair
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define all(x) (x).begin(), (x).end()

/* -------------------- Constants -------------------- */

const int MAX = int(1e9 + 5);
const ll MAXL = ll(1e18 + 5);
const ll MOD = ll(1e9 + 7);
const ll MOD2 = ll(998244353);
const ll CON = (ll)(911382323);
const ll MOD3 = (ll)(972663749);

/* -------------------- Functions -------------------- */

void fastio() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

void precision(int x) {
    cout.setf(ios::fixed | ios::showpoint);
    cout.precision(x);
}

ll gcd(ll a, ll b) {
    while (b) {
        a %= b;
        swap(a, b);
    }
    return a;
}

ll lcm(ll a, ll b) {
    return a / gcd(a, b) * b;
}

ll range_sum(ll a, ll b) {
    ll dif = a - 1, cnt = b - a + 1;
    ll ans = ((b - a + 1) * (b - a + 2)) / 2;
    ans += ((b - a + 1) * dif);
    return ans;
}

string dec_to_bin(ll a) {
    string s = "";
    for (ll i = a; i > 0; ) {
        ll k = i % 2;
        i /= 2;
        char c = k + 48;
        s += c;
    }
    if (a == 0) {
        s = "0";
    }
    reverse(all(s));
    return s;
}

ll bin_to_dec(string s) {
    ll num = 0;
    for (int i = 0; i < s.size(); i++) {
        num *= 2ll;
        num += (s[i] - '0');
    }
    return num;
}

int isPrime(ll a) {
    if (a == 1) return 0;
    for (ll i = 2; i * i <= a; i++) {
        if (a % i == 0) return 0;
    }
    return 1;
}

ll binpow(ll a, ll b) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
        }
        b >>= 1;
        a *= a;
    }
    return ans;
}

ll binpow_by_mod(ll a, ll b, ll mod) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
            ans %= mod;
        }
        b >>= 1;
        a *= a;
        a %= mod;
    }
    return ans;
}

/* -------------------- Solution -------------------- */

struct node {
    int mx, ans, id, li, ri;
};

const int N = 1000005;
int ar[N], dp[N];
node t[N * 4];
int n, q;

int get(int l, int r, int tl = 1, int tr = n, int pos = 1) {
    if (l == tl && r == tr) {
        return t[pos].mx;
    }
    int mid = (tl + tr) / 2;
    if (mid >= r) {
        return get(l, r, tl, mid, 2 * pos);
    }
    if (mid < l) {
        return get(l, r, mid + 1, tr, 2 * pos + 1);
    }
    return max(get(l, mid, tl, mid, 2 * pos), get(mid + 1, r, mid + 1, tr, 2 * pos + 1));
}

node merge(node a, node b) {
    node ret;
    ret.ans = max(a.ans, b.ans);
    ret.mx = max(a.mx, b.mx);
    if (b.mx >= a.mx) ret.id = b.id;
    else ret.id = a.id;
    ret.li = a.li, ret.ri = b.ri;
    int till = min(b.ri, dp[a.id] - 1);
    if (till >= b.li) ret.ans = max(ret.ans, a.mx + get(b.li, till));
    return ret;
}

void bld(int l = 1, int r = n, int pos = 1) {
    if (l == r) {
        t[pos].mx = ar[l];
        t[pos].ans = 0;
        t[pos].id = l;
        t[pos].li = t[pos].ri = l;
    }
    else {
        int mid = (l + r) / 2;
        bld(l, mid, 2 * pos);
        bld(mid + 1, r, 2 * pos + 1);
        t[pos] = merge(t[2 * pos], t[2 * pos + 1]);
    }
}

node qry(int l, int r, int tl = 1, int tr = n, int pos = 1) {
    if (l == tl && r == tr) {
        return t[pos];
    }
    int mid = (tl + tr) / 2;
    if (mid >= r) {
        return qry(l, r, tl, mid, 2 * pos);
    }
    if (mid < l) {
        return qry(l, r, mid + 1, tr, 2 * pos + 1);
    }
    return merge(qry(l, mid, tl, mid, 2 * pos), qry(mid + 1, r, mid + 1, tr, 2 * pos + 1));
}

void slv() {
    cin >> n >> q;
    for (int i = 1; i <= n; ++i) cin >> ar[i];
    for (int i = n; i >= 1; --i) {
        int ind = i + 1;
        while (ind <= n) {
            if (ar[ind] >= ar[i]) break;
            ind = dp[ind];
        }
        dp[i] = ind;
    }
    bld();
    while (q--) {
        int l, r, k;
        cin >> l >> r >> k;
        node nd = qry(l, r);
        cout << (int)(nd.ans <= k) << '\n';
    }
}

void cs() {
    int tstc = 1;
    //cin >> tstc;
    while (tstc--) {
        slv();
    }
}

void precalc() {
    return;
}

int main() {
    fastio();
    precalc();
    //precision(0);
    cs();
    return 0;
}

Compilation message

sortbooks.cpp: In function 'll range_sum(ll, ll)':
sortbooks.cpp:93:21: warning: unused variable 'cnt' [-Wunused-variable]
   93 |     ll dif = a - 1, cnt = b - a + 1;
      |                     ^~~
sortbooks.cpp: In function 'll bin_to_dec(std::string)':
sortbooks.cpp:116:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  116 |     for (int i = 0; i < s.size(); i++) {
      |                     ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4440 KB Output is correct
5 Correct 1 ms 4444 KB Output is correct
6 Correct 1 ms 4572 KB Output is correct
7 Correct 1 ms 4444 KB Output is correct
8 Correct 1 ms 4444 KB Output is correct
9 Correct 1 ms 4444 KB Output is correct
10 Correct 1 ms 4440 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4440 KB Output is correct
5 Correct 1 ms 4444 KB Output is correct
6 Correct 1 ms 4572 KB Output is correct
7 Correct 1 ms 4444 KB Output is correct
8 Correct 1 ms 4444 KB Output is correct
9 Correct 1 ms 4444 KB Output is correct
10 Correct 1 ms 4440 KB Output is correct
11 Correct 4 ms 4696 KB Output is correct
12 Correct 4 ms 6876 KB Output is correct
13 Correct 5 ms 6748 KB Output is correct
14 Correct 7 ms 6948 KB Output is correct
15 Correct 7 ms 6748 KB Output is correct
16 Correct 4 ms 6748 KB Output is correct
17 Correct 3 ms 4700 KB Output is correct
18 Correct 4 ms 6748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3040 ms 51660 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 176 ms 13124 KB Output is correct
2 Correct 179 ms 14868 KB Output is correct
3 Correct 88 ms 15108 KB Output is correct
4 Correct 70 ms 14996 KB Output is correct
5 Correct 70 ms 14928 KB Output is correct
6 Correct 79 ms 14928 KB Output is correct
7 Correct 76 ms 14932 KB Output is correct
8 Correct 65 ms 14736 KB Output is correct
9 Correct 31 ms 5972 KB Output is correct
10 Correct 67 ms 14932 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4440 KB Output is correct
5 Correct 1 ms 4444 KB Output is correct
6 Correct 1 ms 4572 KB Output is correct
7 Correct 1 ms 4444 KB Output is correct
8 Correct 1 ms 4444 KB Output is correct
9 Correct 1 ms 4444 KB Output is correct
10 Correct 1 ms 4440 KB Output is correct
11 Correct 4 ms 4696 KB Output is correct
12 Correct 4 ms 6876 KB Output is correct
13 Correct 5 ms 6748 KB Output is correct
14 Correct 7 ms 6948 KB Output is correct
15 Correct 7 ms 6748 KB Output is correct
16 Correct 4 ms 6748 KB Output is correct
17 Correct 3 ms 4700 KB Output is correct
18 Correct 4 ms 6748 KB Output is correct
19 Correct 431 ms 23176 KB Output is correct
20 Correct 441 ms 24020 KB Output is correct
21 Correct 445 ms 23640 KB Output is correct
22 Correct 429 ms 23632 KB Output is correct
23 Correct 464 ms 24284 KB Output is correct
24 Correct 176 ms 23508 KB Output is correct
25 Correct 154 ms 23592 KB Output is correct
26 Correct 163 ms 23788 KB Output is correct
27 Correct 160 ms 23824 KB Output is correct
28 Correct 173 ms 23892 KB Output is correct
29 Correct 166 ms 23968 KB Output is correct
30 Correct 158 ms 23872 KB Output is correct
31 Correct 184 ms 23908 KB Output is correct
32 Correct 174 ms 23992 KB Output is correct
33 Correct 159 ms 23928 KB Output is correct
34 Correct 166 ms 23600 KB Output is correct
35 Correct 166 ms 23780 KB Output is correct
36 Correct 176 ms 23232 KB Output is correct
37 Correct 165 ms 23380 KB Output is correct
38 Correct 166 ms 23784 KB Output is correct
39 Correct 170 ms 22584 KB Output is correct
40 Correct 128 ms 17748 KB Output is correct
41 Correct 150 ms 22368 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4440 KB Output is correct
5 Correct 1 ms 4444 KB Output is correct
6 Correct 1 ms 4572 KB Output is correct
7 Correct 1 ms 4444 KB Output is correct
8 Correct 1 ms 4444 KB Output is correct
9 Correct 1 ms 4444 KB Output is correct
10 Correct 1 ms 4440 KB Output is correct
11 Correct 4 ms 4696 KB Output is correct
12 Correct 4 ms 6876 KB Output is correct
13 Correct 5 ms 6748 KB Output is correct
14 Correct 7 ms 6948 KB Output is correct
15 Correct 7 ms 6748 KB Output is correct
16 Correct 4 ms 6748 KB Output is correct
17 Correct 3 ms 4700 KB Output is correct
18 Correct 4 ms 6748 KB Output is correct
19 Execution timed out 3040 ms 51660 KB Time limit exceeded
20 Halted 0 ms 0 KB -