Submission #330771

#TimeUsernameProblemLanguageResultExecution timeMemory
330771ThaiBaHungPilot (NOI19_pilot)C++14
89 / 100
1090 ms135592 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 3; int n, q; int a[N]; int qu[N]; long long L[N], R[N]; stack < int > st; vector < int > num[N]; vector < int > pos[N]; long long ans[N]; vector < int > cur; int ma = 0; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("pilot.in","r",stdin); freopen("pilot.out","w",stdout); cin >> n >> q; for (int i = 1; i <= n; i++) { cin >> a[i]; num[a[i]].push_back(i); } for (int i = 1; i <= q; i++) cin >> qu[i], ma = max(ma, qu[i]), pos[qu[i]].push_back(i); st.push(0); a[0] = 1e9 + 7; for (int i = 1; i <= n; i++) { while (st.size() && a[i] >= a[st.top()]) st.pop(); L[i] = st.top() + 1; st.push(i); } while (st.size()) st.pop(); a[n + 1] = 1e9 + 7; st.push(n + 1); for (int i = n; i >= 1; i--) { while (st.size() && a[i] > a[st.top()]) st.pop(); R[i] = st.top() - 1; st.push(i); } long long res = 0; for (int i = 1; i <= ma; i++) { for (int u : num[i]) cur.push_back(u); if (pos[i].size()) { for (int u : cur) { long long lo = u - L[u] + 1; long long hi = R[u] - u + 1; res += hi * lo; } for (int vt : pos[i]) ans[vt] = res; cur.clear(); } } for (int i = 1; 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...