Submission #1143822

#TimeUsernameProblemLanguageResultExecution timeMemory
1143822mattsohPilot (NOI19_pilot)C++20
8 / 100
1096 ms4476 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second typedef long long ll; const ll maxn = 1e5+10; pair<ll,ll> h[maxn]; vector<pair<ll,ll>> rgs; pair<ll,ll> p[maxn]; void rem(ll idx ){ ll l = 0, r = rgs.size()-1; ll m; while (true){ m = (l+r)/2; if (rgs[m].fi <= idx && idx <= rgs[m].se) break; if (m<idx){ r = m; } else l = m; } pair<ll,ll> range = rgs[m]; if (range.fi == idx){ rgs[m].fi = idx+1; } else if (range.se == idx){ rgs[m].se = idx-1; } else{ rgs.insert(rgs.begin()+m+1,{idx+1,rgs[m].se}); rgs[m].se = idx; } } signed main(){ ll n,q;cin>>n>>q; for (ll i = 0;i<n;i++){ ll hgt;cin>>hgt; h[i] = {hgt,i}; } rgs.push_back({0,n}); sort(h,h+n); reverse(h,h+n); // for (ll i = 0;i<n;i++){ // cout<<h[i].fi<<h[i].se<<endl; // } ll maxh = n, curr = 0; for (ll i = 0;i<q;i++){ ll pl;cin>>pl; p[i] = {pl,i}; } sort(p,p+q); reverse(p,p+q); for (ll i = 0;i<q;i++){ ll plane = p[i].fi, ord = p[i].se; while (h[curr].fi > plane){ // cout<<"removing"<<h[curr].fi<<h[curr].se<<endl; rem(h[curr].se); curr++; } ll total = 0; for (auto range:rgs){ // cout<<"range"<<range.fi<<' '<<range.se<<endl; ll diff = range.se - range.fi; total += diff*(diff+1)/2; } p[i] = {ord, total}; } sort(p,p+q); for (ll i = 0;i<q;i++)cout<<p[i].se<<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...