제출 #1123822

#제출 시각아이디문제언어결과실행 시간메모리
1123822ShadowSharkPilot (NOI19_pilot)C++20
100 / 100
597 ms39004 KiB
#include <bits/stdc++.h> using namespace std; const int maxN = 1e6 + 5; int n, a[maxN], query[maxN], lt[maxN], rt[maxN]; long long res[maxN]; vector<int> event, num; bool cmp1(int x, int y) {return (a[x] != a[y] ? a[x] < a[y] : x < y);} bool cmp2(int x, int y) {return (query[x] != query[y] ? query[x] < query[y] : x < y);} int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int q; cin >> n >> q; for (int i = 1; i <= n; i++) { cin >> a[i]; num.push_back(i); } stack<int> st; for (int i = 1; i <= n; i++) { while (st.size() > 0 && a[st.top()] <= a[i]) st.pop(); if (st.size() == 0) lt[i] = i - 1; else lt[i] = i - st.top() - 1; st.push(i); } while (st.size()) st.pop(); for (int i = n; i >= 1; i--) { while (st.size() > 0 && a[st.top()] < a[i]) st.pop(); if (st.size() == 0) rt[i] = n - i; else rt[i] = st.top() - i - 1; st.push(i); } for (int i = 1; i <= q; i++) { cin >> query[i]; event.push_back(i); } sort(num.begin(), num.end(), cmp1); sort(event.begin(), event.end(), cmp2); int i = 0, j = 0; long long ans = 0; while (j < q) { while (i < n && a[num[i]] <= query[event[j]]) { int v = num[i]; int x = lt[v], y = rt[v]; ans = ans - 1LL * x * (x + 1) / 2; ans = ans - 1LL * y * (y + 1) / 2; ans = ans + 1LL * (x + y + 1) * (x + y + 2) / 2; i++; } res[event[j]] = ans; j++; } for (int i = 1; i <= q; i++) cout << res[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...