제출 #1025001

#제출 시각아이디문제언어결과실행 시간메모리
1025001lamagrilPilot (NOI19_pilot)C++14
40 / 100
46 ms9164 KiB
#include <bits/stdc++.h>

using namespace std;

const int md=1e9+7;

int32_t main(){
    cin.tie(NULL)->sync_with_stdio(false);
    int n,q; cin >> n >> q;
    vector<int> he(n+1);
    vector<pair<int,int>> h(n+1),y(q+1);
    vector<int> pri(q+1);
    int ans=n*(n+1)/2;
    for(int i=1 ; i<=n ; i++) cin >> h[i].first,he[i]=h[i].first,h[i].second=i;
    for(int i=1 ; i<=q ; i++) cin >> y[i].first,y[i].second=i;
    sort(h.begin(),h.end());
    sort(he.begin(),he.end());
    sort(y.begin(),y.end());
    reverse(y.begin()+1,y.end());
    set<int> s;
    s.insert(0);
    s.insert(n+1);
    int id=n;
    for(int t=1 ; t<=q ; t++){
        int idx=upper_bound(he.begin(),he.end(),y[t].first)-he.begin();
        for(int i=idx ; i<=id ; i++){
            s.insert(h[i].second);
            auto itr=s.lower_bound(h[i].second);
            int now=*itr;
            itr--;
            int l=*itr;
            itr++;
            itr++;
            auto r=*itr;
            ans-=(now-l-1)*(r-now-1);
            ans-=r-l-1;
        }
        id=idx-1;
        pri[y[t].second]=ans;
    }
    for(int i=1 ; i<=q ; i++){
        cout << pri[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...