제출 #1187220

#제출 시각아이디문제언어결과실행 시간메모리
1187220aladdin1Pilot (NOI19_pilot)C++20
89 / 100
1018 ms83376 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...