Submission #1143926

#TimeUsernameProblemLanguageResultExecution timeMemory
1143926mattsohPilot (NOI19_pilot)C++17
5 / 100
91 ms4936 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...