Submission #1312234

#TimeUsernameProblemLanguageResultExecution timeMemory
1312234samarthkulkarniPilot (NOI19_pilot)C++20
26 / 100
34 ms14604 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" #define pr pair<ll, ll> #define ff first #define ss second void solution(); int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); solution(); return 0; } const int N = 1e6+10; ll a[N]; ll cnt[N]; ll h[N]; ll nw[N]; struct JohnWick{ void update(int i, ll val) { for (; i < N; i += i & (-i)) h[i] += val; } ll query(int i) { ll ans = 0; for (; i > 0; i -= i & (-i)) ans += h[i]; return ans; } }; struct JohnWick2{ void update(int i, ll val) { for (; i < N; i += i & (-i)) nw[i] += val; } ll query(int i, int j) { ll ans = 0; i--; for (; j > 0; j -= j & (-j)) ans += nw[j]; for (; i > 0; i -= i & (-i)) ans -= nw[i]; return ans; } }; void solution() { ll n, q; cin >> n >> q; vi temp(n); for (int i = 0; i < n; i++) cin >> temp[i]; int id = 0; for (auto val : temp) { if (a[id] != val) a[++id] = val; cnt[id]++; } n = id; vi prev(n+1), nxt(n+1); a[0] = 1e18; a[n+1] = 1e18; stack<ll> hs; hs.push(0); for (int i = 1; i <= n; i++) { while (a[hs.top()] <= a[i]) hs.pop(); prev[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(); nxt[i] = hs.top(); hs.push(i); } JohnWick m; JohnWick2 k; for (int i = 1; i <= n; i++) k.update(i, cnt[i]); auto val = [&](int i) { ll l = k.query(prev[i]+1, i-1); ll r = k.query(i+1, nxt[i]-1); return l*r + l*cnt[i] + r*cnt[i] + cnt[i]*(cnt[i]+1)/2; }; for (int i = 1; i <= n; i++) { m.update(a[i], val(i)); } while (q--) { ll x; cin >> x; cout << m.query(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...