제출 #890374

#제출 시각아이디문제언어결과실행 시간메모리
890374vjudge1Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
64 / 100
193 ms25016 KiB
//#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #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> #include <unordered_map> using namespace std; typedef long long ll; typedef long double ld; #define int long long #define all(x) x.begin(),x.end() #define pb push_back #define ent "\n" const int maxn = (int)2e5 + 13; const ll inf = (long long)1e18 + 20; const int mod = (int)1e9 + 7; int n,m; int a[maxn]; int dp[maxn]; vector<pair<pair<int,int>,int>>g[maxn]; int t[maxn *4]; int ans[maxn ]; void upd(int v,int tl,int tr,int pos,int x){ if(tl == tr){ t[v] = x; return; } int mid = (tl + tr) >> 1; if(pos <= mid)upd(v * 2,tl,mid,pos,x); else upd(v * 2 + 1,mid + 1,tr,pos,x); t[v] = max(t[v * 2],t[v * 2 + 1]); } int get(int v,int tl,int tr,int l,int r){ if(l <= tl && tr <= r){ return t[v]; } if(l > tr || r < tl)return 0; int mid = (tl + tr) >> 1; return max(get(v * 2,tl,mid,l,r),get(v * 2 + 1,mid + 1,tr,l,r)); } void solve(){ cin >> n >> m; vector<int>v; for(int i = 1 ; i <= n ; i ++){ cin >> a[i]; while(v.size()){ if(a[v.back()] <= a[i]){ v.pop_back(); } else{ break; } } if(v.size()){ dp[i] = v.back(); } v.pb(i); } for(int i = 1 ; i <= m ; i ++){ int l,r,w;cin >> l>>r >> w; g[r].pb({{l,w},i}); } for(int i = 1 ; i <= n ; i ++){ if(dp[i])upd(1,1,n,dp[i],a[dp[i]] + a[i]); for(auto to : g[i]){ int l = to.first.first,w = to.first.second; int mx = get(1,1,n,l,i); if(mx > w){ ans[to.second] = 1; } } } for(int i = 1 ; i <= m ; i ++){ cout << (ans[i] ^ 1) << ent; } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; //cin >> t; while(t --){ solve(); } return 0; }
#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...