제출 #895242

#제출 시각아이디문제언어결과실행 시간메모리
895242vjudge1Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
0 / 100
833 ms78504 KiB
//GOAL : BECOME A MASTER //cf : Mali //Toktarbek Muhammedali 10B //Esyk BIL // #include <bits/stdc++.h> #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <queue> #include <stack> #include <string> #include <bitset> #include <cstdio> #include <limits> #include <vector> #include <climits> #include <cstring> #include <cstdlib> #include <fstream> #include <numeric> #include <sstream> #include <cassert> #include <iomanip> #include <iostream> #include <algorithm> #include <stdio.h> #include <fstream> using namespace std; #define fast() ios_base::sync_with_stdio(0),cin.tie(0) #define int long long #define F first #define S second const int N = 1e6 + 17; const long long INF = 1e18 + 1; const int mod = 1e9; using namespace std; int a[N]; int res[N]; int t[4*N]; vector<pair<int , int>>g[N]; int llmax(int a, int b){ if (a > b)return a; else return b; } void build(int v, int tl , int tr){ if (tl == tr){ t[v] = a[tl]; // d[v] = {b[tl] , tl}; return; } int md = (tl + tr) / 2; build(v+v , tl , md) , build(v+v+1 , md+1 , tr); t[v] = max(t[v+v] , t[v+v+1]); // d[v] = max(d[v+v] , d[v+v+1]); } void u1(int v , int tl , int tr , int pos , int val){ if (tl == tr){ t[v] = val; return; } int md = (tl + tr) / 2; if (pos <= md)u1(v+v , tl , md , pos , val); else u1(v+v+1 , md+1 , tr , pos , val); t[v] = max(t[v+v] , t[v+v+1]); return; } int g1(int v , int tl , int tr , int l , int r){ if (r < tl || tr < l)return 0; if (l <= tl && tr <= r)return t[v]; int md = (tl + tr) / 2; return max(g1(v+v , tl , md , l , r) , g1(v+v , md+1 , tr , l , r)); } void goat(){ // cout << 1; int n , q; cin >> n >> q; for (int i = 1 ; i <= n ; i ++){ cin >> a[i]; } // cout << 1; // build(1 , 1 , n); // // cout << 1; for (int i = 1 ; i <= q ; i ++){ // // cout << 1; int ll , rr , xx; cin >> ll >> rr >> xx; g[rr].push_back({i , xx}); } // // cout << 1; stack<int>s; for (int i = 1 ; i <= n ; i ++){ while (s.size() > 0 && a[s.top()] <= a[i])s.pop(); if (s.size() > 0 && s.top() != 0)u1(1 , 1 , n , s.top() , a[s.top()]+a[i]); for (auto to:g[i])if (g1(1 , 1 , n , 1 , i) <= to.S)res[to.F] = 1; s.push(i); } for (int i = 1 ; i <= q ; i ++)cout << res[i] << "\n"; } signed main () { fast(); // cout << 1; // freopen("B.in", "r", stdin); // freopen("B.out", "w", stdout); // int T; // cin >> T; // for (int i = 1 ; i <= T ; i ++){ goat(); // } }
#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...