Submission #715710

#TimeUsernameProblemLanguageResultExecution timeMemory
715710North1304Pilot (NOI19_pilot)C++17
89 / 100
1050 ms47036 KiB
#include <bits/stdc++.h> using namespace std; int n,m; pair<int,int> a[1000001],q[1000001]; set<pair<int,int> > s; long long ans[1000001],now; void add(int x) { auto it = s.lower_bound({x, INT_MAX}); int ll = x , rr = x; long long l = 0,r = 0; if (it!=s.begin()){ it--; if(it->second==x-1) { l = it->second-it->first+1; ll = it->first; it = s.erase(it); } else it++; } if (it!=s.end()) { if(it->first==x+1) { r = it->second-it->first+1; rr = it->second; s.erase(it); } } now += (l+1) * (r+1); s.insert({ll,rr}); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; for(int i=1;i<=n;i++) cin >> a[i].first, a[i].second = i; for(int i=1;i<=m;i++) cin >> q[i].first, q[i].second = i; sort(a+1, a+n+1); sort(q+1, q+m+1); int x = 1,y = 1; while (y<=m) { while(x<=n and a[x].first<=q[y].first) { add(a[x].second); x++; } ans[q[y].second] = now; y++; } for(int i=1;i<=m;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...