Submission #1119857

#TimeUsernameProblemLanguageResultExecution timeMemory
1119857AvianshPilot (NOI19_pilot)C++17
89 / 100
1073 ms75080 KiB
#include <bits/stdc++.h> using namespace std; signed main(){ ios::sync_with_stdio(0); cin.tie(0); int n,q; cin >> n >> q; int h[n]; vector<int> mp[1000005]; for(int i = 0;i<n;i++){ cin >> h[i]; mp[h[i]].push_back(i); } pair<int,int> qs[q]; for(int i = 0;i<q;i++){ int y; cin >> y; qs[i]={y,i}; } sort(qs,qs+q); long long ans[q]; long long currans = ((1LL*n*(n-1))/2)+n; set<pair<int,int>>rangs; rangs.insert({0,n-1}); int las = 1e6+1; bool wor = 1; for(int i = q-1;i>=0;i--){ while(wor&&las>qs[i].first){ for(int i : (mp[las])){ set<pair<int,int>>::iterator it = (--rangs.upper_bound({i,2e9})); pair<int,int>p = *it; int len = p.second-p.first+1; currans-=((1LL*len*(len-1))/2)+len; rangs.erase(it); if(p.first!=i){ rangs.insert({p.first,i-1}); len = i-p.first; currans+=((1LL*len*(len-1))/2)+len; } if(p.second!=i){ rangs.insert({i+1,p.second}); len = p.second-i; currans+=((1LL*len*(len-1))/2)+len; } } if(las==0){ wor=0; } las--; } ans[qs[i].second]=currans; } for(long long i : ans){ cout << i << "\n"; } return 0; }
#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...