Submission #1340855

#TimeUsernameProblemLanguageResultExecution timeMemory
1340855NipphitchPilot (NOI19_pilot)C++20
89 / 100
1098 ms104264 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 
const int N=1e6+5;

int n,q,h[N],sum_now,ans[N];
set <int> pos,tmp;
vector <pair <int,int>> vec;

int cal(int x){
    return x*(x+1)/2;
}

bool cmp(pair <int,int> x,pair <int,int> y){
    if(x.first!=y.first) return x.first>y.first;
    else return x.second<y.second;
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> q;
    for(int i=1;i<=n;i++){
        cin >> h[i];
        vec.push_back({h[i],i});
    }
    sum_now=cal(n);
    ans[N-1]=sum_now;
    pos.insert(0);
    pos.insert(n+1);
    sort(vec.begin(),vec.end(),cmp);
    vec.push_back({0,-1});
    //ans[(*vec.begin()).first]=sum_now;
    //tmp.insert((*vec.begin()).first);
    int pv=-1;
    for(auto [h_i,idx]:vec){
        if(pv!=h_i) ans[h_i]=sum_now;
        tmp.insert(h_i);
        if(idx==-1) continue;
        auto itr=pos.lower_bound(idx);
        auto itl=prev(itr);
        int l=*itl,r=*itr;
        sum_now-=cal(r-l);
        sum_now+=cal(idx-l)+cal(r-idx);
        //cout << h_i << " : " << sum_now << "\n";
        pos.insert(idx);
        pv=h_i;
        //ans[h_i-1]=sum_now;
        //tmp.insert(h_i-1);
    }
    while(q--){
        int x;
        cin >> x;
        cout << ans[*prev(tmp.upper_bound(x))] << "\n";
    }
}
#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...