Submission #793899

#TimeUsernameProblemLanguageResultExecution timeMemory
79389912345678Pilot (NOI19_pilot)C++17
100 / 100
991 ms87956 KiB
#include <bits/stdc++.h> using namespace std; const int nx=1e6+5; long long n, q, h[nx], dp[nx], t, l, r; vector<vector<int>> d(nx); struct segtree { int d[4*nx]; void build(int l, int r, int i) { if (l==r) return void(d[i]=h[l]); int md=(l+r)/2; build(l, md, 2*i); build(md+1, r, 2*i+1); d[i]=max(d[2*i], d[2*i+1]); } int queryleft(int l, int r, int i, int idx) { if (idx<=l) return -1; if (l==r&&d[i]>h[idx]) return l; if (d[i]<=h[idx]) return -1; int md=(l+r)/2, tmp=queryleft(md+1, r, 2*i+1, idx); if (tmp!=-1) return tmp; return queryleft(l, md, 2*i, idx); } int queryright(int l, int r, int i, int idx) { if (idx>=r) return -1; if (l==r&&d[i]>=h[idx]) return l; if (d[i]<h[idx]) return -1; int md=(l+r)/2, tmp=queryright(l, md, 2*i, idx); if (tmp!=-1) return tmp; return queryright(md+1, r, 2*i+1, idx); } } s; int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>q; for (int i=1; i<=n; i++) cin>>h[i], d[h[i]].push_back(i); s.build(1, n, 1); for (int i=1; i<nx; i++) { dp[i]=dp[i-1]; sort(d[i].begin(), d[i].end()); for (auto x:d[i]) { l=1; r=n; int left=s.queryleft(1, n, 1, x), right=s.queryright(1, n, 1, x); if (left!=-1) l=left+1; if (right!=-1) r=right-1; dp[i]+=(x-l+1)*(r-x+1); //cout<<i<<' '<<l<<' '<<r<<' '<<x<<' '<<dp[i]<<' '<<left<<' '<<right<<'\n'; } } //cout<<s.queryright(1, n, 1, 1); while (q--) cin>>t, cout<<dp[t]<<'\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...