Submission #1143925

#TimeUsernameProblemLanguageResultExecution timeMemory
1143925mattsohPilot (NOI19_pilot)C++17
89 / 100
1098 ms56824 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second typedef long long ll; const ll maxn = 1e6+10; pair<ll,ll> h[maxn],p[maxn]; set<pair<ll,ll>> rgs; ll summ=0, ans[maxn]; bool cmpp(pair<ll,ll>t1,pair<ll,ll>t2){ if (t1.fi!=t2.fi) return t1.fi>t2.fi; else return t1.se<t2.se; } void rem(ll idx ){ auto it = rgs.lower_bound({idx, idx}); if (it == rgs.end() || it->fi > idx) { if (it-- == rgs.begin()) return; } pair<ll,ll> range = *it; rgs.erase(it); ll len = range.se - range.fi + 1; summ -= len * (len + 1) / 2; if (range.fi < idx) { ll leftLen = idx - range.fi; summ += leftLen * (leftLen + 1) / 2; rgs.insert({range.fi, idx - 1}); } if (idx < range.se) { ll rightLen = range.se - idx; summ += rightLen * (rightLen + 1) / 2; rgs.insert({idx + 1, range.se}); } } signed main(){ cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false); ll n,q;cin>>n>>q; for (ll i = 0;i<n;i++){ ll hgt;cin>>hgt; h[i] = {hgt,i}; } rgs.insert({0,n-1}); sort(h,h+n,cmpp); // reverse(h,h+n); // for (ll i = 0;i<n;i++){ // cout<<h[i].fi<<h[i].se<<endl; // } summ =n * (n + 1) / 2; ll maxh = n, curr = 0; for (ll i = 0;i<q;i++){ ll pl;cin>>pl; p[i] = {pl,i}; } sort(p,p+q,cmpp); for (ll i = 0;i<q;i++){ ll plane = p[i].fi, ord = p[i].se; // cout<<"plane height "<<plane<<ord<<endl; while (curr < n && h[curr].fi > plane){ // cout<<"removing"<<h[curr].fi<<h[curr].se<<endl; rem(h[curr].se); curr++; } ans[ord] = summ; } for (ll i = 0;i<q;i++)cout<<ans[i]<<endl; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...