Submission #1174020

#TimeUsernameProblemLanguageResultExecution timeMemory
1174020ezzzayPilot (NOI19_pilot)C++17
5 / 100
51 ms8684 KiB
#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define int long long
const int N=1e6+5;
int a[N];
int ans[N];
int fun(int L, int R){
    int p=R-L-1;
    return (p*(p-1)/2+p);
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,q;
    cin>>n>>q;
    int H= (n*(n-1))/2+n;
    vector<int>vc;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        vc.pb(a[i]*1e9+i);
    }
    vector<int>qr(q);
    for(int i=0;i<q;i++){
        cin>>qr[i];
        qr[i]=qr[i]*1e9+i;
    }
    sort(qr.begin(),qr.end(),greater<int>());
    sort(vc.begin(),vc.end());
    set<int>st={0,n+1};
    for(auto p:qr){
        int x=p/1e9,id=p% (int)1e9;
        if(vc.empty()){
            ans[id]=H;
            continue;
        }
        while(vc.size() and vc.back()/(int)(1e9)>x){
            int idx=vc.back()%(int)1e9;
            int R=*st.upper_bound(idx);
            int L= *prev(st.lower_bound(idx));
            H-=fun(R,L);
            H+=fun(L,idx);
            H+=fun(idx,R);
            st.insert(idx);
            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...