Submission #1187217

#TimeUsernameProblemLanguageResultExecution timeMemory
1187217aladdin1Pilot (NOI19_pilot)C++20
89 / 100
1100 ms83416 KiB
#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define ll long long
#define int long long
const int N=1e6+5;
int a[N];
ll ans[N];
bool in[N];
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    vector<pair<int,int>>qr(q);
    for(int i=0;i<q;i++){
        cin>>qr[i].ff;
        qr[i].ss=i;
    }
    sort(qr.begin(),qr.end());
    reverse(qr.begin(),qr.end());
    vector<pair<int,int>>vc;
    for(int i=1;i<=n;i++){
        vc.pb({a[i],i});
    }
    sort(vc.begin(),vc.end());
    ll H= (n*(n-1))/2+n;
    set<int>st={0,n+1};
    in[0]=1;
    in[n+1]=1;
    for(auto p:qr){
        int x=p.ff,id=p.ss;
        while(vc.size() and vc.back().ff>x){
            int idx=vc.back().ss;
            int R=*st.upper_bound(idx);
            int L= *prev(st.lower_bound(idx));
            ll p=R-L-1;
            
            H-=(p*(p-1)/2+p);
            p=idx-L-1;
            H+=(p*(p-1)/2+p);
            p=R-idx-1;
            H+=(p*(p-1)/2+p);
            if(in[idx-1]==0 or in[idx+1]==0){
                st.insert(idx);
            }
            in[idx]=1;
            vc.pop_back();
        }
        ans[id]=H;
    }
    for(int i=0;i<q;i++){
        cout<<ans[i]<<'\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...