Submission #249877

#TimeUsernameProblemLanguageResultExecution timeMemory
249877hohohahaHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
64 / 100
3107 ms259960 KiB
// ZapZu's code hohoho #pragma GCC optimize ("O3") #include <bits/stdc++.h> using namespace std; #define mp make_pair #define pb push_back #define eb emplace_back #define fi first #define se second #define lb lower_bound #define ub upper_bound #define dfs_black 1 #define dfs_white -1 #define pr pair #define vt vector #define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define ln 2*id #define rn 2*id+1 mt19937_64 mt(chrono::steady_clock::now().time_since_epoch().count()); typedef double db; typedef long long li; typedef long double ld; typedef pr<int, int> ii; typedef pr<ld,ld> dd; typedef vt<int> vi; typedef vt<li> vli; typedef vt<ld> vld; typedef vt<ii> vii; typedef map<int, int> mii; typedef map<int, bool> mib; typedef map<int, char> mic; typedef set<int> s_i; typedef set<char> s_c; const int MOD = 1e9+7; const li INF = 1e18; const ld PI = 4*atan((ld)1); int a[1000005]; struct it { vi mx, mx_inv; vt<vi> arr; int n, re, cur_mx; it(int _n): n(_n) { mx.assign(4*n+5, 0); mx_inv.assign(4*n+5, 0); arr.assign(4*n+5, vi()); } void build(int id, int l, int r) { if(l==r) { mx[id] = a[l]; mx_inv[id] = 0; arr[id].eb(a[l]); return; } build(ln, l, (l+r)/2); build(rn, (l+r)/2+1, r); mx[id] = max(mx[ln], mx[rn]); arr[id].resize(r-l+1); mx_inv[id] = max(mx_inv[2*id], mx_inv[2*id+1]); for(int i=0; i<arr[rn].size(); i++) if(arr[rn][i]<mx[ln])mx_inv[id] = max(mx_inv[id],mx[ln]+arr[rn][i]); int p1=-1, p2=-1; while(p1+1<arr[ln].size() || p2+1<arr[rn].size()) { if(p2+1>=arr[rn].size()) { arr[id][p1+p2+2] = arr[ln][p1+1]; //w? p1++; } else if(p1+1>=arr[ln].size()) { arr[id][p1+p2+2] = arr[rn][p2+1]; p2++; } else if(arr[ln][p1+1]<arr[rn][p2+1]) { arr[id][p1+p2+2] = arr[ln][p1+1]; //w? p1++; } else { arr[id][p1+p2+2] = arr[rn][p2+1]; p2++; } } } void g(int id, int l, int r, int ll, int rr) { if(ll>r or l>rr) return; if(ll<=l and r<=rr) { re = max(re, mx_inv[id]); int lb = 0, rb = arr[id].size()-1; while(lb<rb) { int mid = (lb+rb+1)/2; if(arr[id][mid]<cur_mx) lb=mid; else rb=mid-1; } if(arr[id][lb]<cur_mx) re = max(re, cur_mx+arr[id][lb]); cur_mx = max(cur_mx, mx[id]); } else { g(ln, l, (l+r)/2, ll, rr); g(rn, (l+r)/2+1, r, ll, rr); } } int query(int l, int r) { re=0; cur_mx=0; g(1, 1, n, l, r); return re; } } IT(1); signed main() { // freopen(".inp", "r", stdin); // freopen(".out", "w", stdout); fastio; int n, q; cin>>n>>q; IT = it(n); for(int i=1; i<=n; i++) cin>>a[i]; IT.build(1, 1, n); while(q--) { int l, r, k; cin>>l>>r>>k; if(IT.query(l, r)>k) cout<<0; else cout<<1; cout<<endl; } }

Compilation message (stderr)

sortbooks.cpp: In member function 'void it::build(int, int, int)':
sortbooks.cpp:68:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0; i<arr[rn].size(); i++) if(arr[rn][i]<mx[ln])mx_inv[id] = max(mx_inv[id],mx[ln]+arr[rn][i]);
                ~^~~~~~~~~~~~~~~
sortbooks.cpp:70:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(p1+1<arr[ln].size() || p2+1<arr[rn].size())
         ~~~~^~~~~~~~~~~~~~~
sortbooks.cpp:70:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(p1+1<arr[ln].size() || p2+1<arr[rn].size())
                                ~~~~^~~~~~~~~~~~~~~
sortbooks.cpp:72:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if(p2+1>=arr[rn].size()) 
       ~~~~^~~~~~~~~~~~~~~~
sortbooks.cpp:77:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    else if(p1+1>=arr[ln].size())
            ~~~~^~~~~~~~~~~~~~~~
#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...