Submission #481311

#TimeUsernameProblemLanguageResultExecution timeMemory
481311vishesh312Pilot (NOI19_pilot)C++17
100 / 100
627 ms52200 KiB
#include "bits/stdc++.h" using namespace std; /* #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using ordered_set = tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>; */ #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) #define sz(x) (int)(x).size() using ll = long long; const int mod = 1e9+7; struct UFDS { vector<int> link, siz; UFDS (int n) { siz.resize(n, 1); link.resize(n); iota(all(link), 0); } int find(int x) { if (x == link[x]) { return x; } return link[x] = find(link[x]); } ll ans(int x) { ll ret = siz[find(x)]; return (ret*(ret+1))/2; } void unite(int a, int b) { a = find(a), b = find(b); if (siz[a] < siz[b]) swap(a, b); siz[a] += siz[b]; link[b] = a; } }; void solve(int tc) { int n, q; cin >> n >> q; vector<pair<int, int>> h(n), y(q); vector<bool> used(n); vector<ll> ans(q); UFDS uf(n); for (int i = 0; i < n; ++i) { cin >> h[i].first; h[i].second = i; } for (int i = 0; i < q; ++i) { cin >> y[i].first; y[i].second = i; } sort(all(h)); sort(all(y)); int p = 0; ll cur = 0; for (int i = 0; i < q; ++i) { while (p < n and h[p].first <= y[i].first) { if (h[p].second+1 < n and used[h[p].second+1]) { cur -= uf.ans(h[p].second+1); uf.unite(h[p].second, h[p].second+1); } if (h[p].second-1 >= 0 and used[h[p].second-1]) { cur -= uf.ans(h[p].second-1); uf.unite(h[p].second, h[p].second-1); } cur += uf.ans(h[p].second); used[h[p].second] = true; ++p; } ans[y[i].second] = cur; } for (auto x : ans) cout << x << '\n'; } signed main() { cin.tie(0)->sync_with_stdio(0); int tc = 1; //cin >> tc; for (int i = 1; i <= tc; ++i) solve(i); return 0; }
#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...