제출 #1312552

#제출 시각아이디문제언어결과실행 시간메모리
1312552samarthkulkarniPilot (NOI19_pilot)C++20
100 / 100
264 ms54424 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define vi vector<long long> #define all(x) x.begin(), x.end() #define endl "\n" void solution(); int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); solution(); return 0; } const int N = 1e6+10; ll a[N]; ll h[N]; ll cnt[N]; ll res[N]; void solution() { ll n, q; cin >> n >> q; vi temp(n); for (ll &z : temp) cin >> z; int id = 0; for (int i = 0; i < n; i++) { if (a[id] != temp[i]) a[++id] = temp[i]; cnt[id]++; } n = id; a[0] = a[n+1] = 1e18; for (int i = 1; i < N; i++) cnt[i] += cnt[i-1]; stack<int> hs; vi pg(n+1), ng(n+1); hs.push(0); for (int i = 1; i <= n; i++) { while (a[hs.top()] < a[i]) hs.pop(); pg[i] = hs.top(); hs.push(i); } while (!hs.empty()) hs.pop(); hs.push(n+1); for (int i = n; i >= 1; i--) { while (a[hs.top()] <= a[i]) hs.pop(); ng[i] = hs.top(); hs.push(i); } auto val = [&](int i) { ll l = cnt[i-1] - cnt[pg[i]]; ll r = cnt[ng[i]-1] - cnt[i]; ll m = cnt[i]-cnt[i-1]; return l*r + l*m + r*m + m*(m+1)/2; }; for (int i = 1; i <= n; i++) { res[a[i]] += val(i); } for (int i = 1; i < N; i++) res[i] += res[i-1]; while (q--) { ll x; cin >> x; cout << res[x] << endl; } }
#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...