제출 #889928

#제출 시각아이디문제언어결과실행 시간메모리
889928vjudge1Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
0 / 100
1213 ms124128 KiB
#pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include<bits/stdc++.h> #define ll long long #define F first #define S second #define pb push_back #define pf push_front #define ppb pop_back #define ppf pop_front #define all(x) x.begin(), x.end() #define sz(x) x.size() #define forik(x) ll i = 1; i <= x; i++ // (a mod 1e9) / (b mod 1e9) = a * (b^1e9) using namespace std; ll t[8000001], a, b, c, d, e, f, n, m, k, p[1000001], l, md[8000001]; pair <ll, ll> mx[8000001]; pair <ll, ll> qw (pair <ll, ll> a, pair <ll, ll> b){ if (a.F > b.F){ return a; } else if (b.F > a.F){ return b; } else{ if (b.S > a.S){ return b; } else{ return a; } } } void buildmx (ll tl = 1, ll tr = n, ll v = 1){ if (tl == tr){ mx[v] = {p[tl], tl}; return; } ll tm = (tl + tr) / 2; buildmx (tl, tm, v * 2); buildmx (tm + 1, tr, v * 2 + 1); mx[v] = qw (mx[v * 2], mx[v * 2 + 1]); } pair <ll, ll> getmx (ll l, ll r, ll tl = 1, ll tr = n, ll v = 1){ if (l <= tl && tr <= r){ return mx[v]; } if (tr < l || r < tl){ return {-1e18, 0}; } ll tm = (tl + tr) / 2; return qw (getmx (l, r, tl, tm, v * 2), getmx (l, r, tm + 1, tr, v * 2 + 1)); } void push (ll tl, ll tr, ll v){ if (md[v] != -1){ t[v] = max (md[v], t[v]); if (tl != tr){ md[v * 2] += md[v]; md[v * 2 + 1] += md[v]; } md[v] = -1; } } void upd (ll l, ll r, ll val, ll tl = 1, ll tr = n, ll v = 1){ push (tl, tr, v); if (l <= tl && tr <= r){ md[v] = val; return; } if (l > tr || tl > r){ return; } ll tm = (tl + tr) / 2; upd (l, r, val, tl, tm, v * 2); upd (l, r, val, tm + 1, tr, v * 2 + 1); t[v] = max (t[v * 2],t[v * 2 + 1]); } ll get (ll l, ll r, ll tl = 1, ll tr = n, ll v = 1){ push (tl, tr, v); if (l <= tl && tr <= r){ return t[v]; } if (l > tr || tl > r){ return -1; } ll tm = (tl + tr) / 2; return max (get (l, r, tl, tm, v * 2), get (l, r, tm + 1, tr, v * 2 + 1)); } signed main (){ //freopen (".in", "r", stdin); //freopen (".out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 1; i <= 8000000; i++){ md[i] = -1; } for (int i = 1; i <= n; i++){ cin >> p[i]; } buildmx (); for (int i = 2; i <= n; i++){ // l = 1; while (l < i){ pair <ll, ll> an = getmx (l, i); if (an.S == i){ break; } // cout << an.F << ' ' << an.S << ' ' << i << ' ' << l << '\n'; upd (l, i, an.F + p[i]); l = an.S + 1; } } while (m--){ cin >> a >> b >> c; if (get (a, b) > c){ cout << 0 << '\n'; } else{ cout << 1 << '\n'; } } // for (int i = 1; i <= 40; i++){ // cout << t[i] << ' '; // } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...