Submission #209774

#TimeUsernameProblemLanguageResultExecution timeMemory
209774Alexa2001Pilot (NOI19_pilot)C++17
89 / 100
1096 ms107648 KiB
#include <bits/stdc++.h> using namespace std; /// 16:02 typedef long long ll; const int Nmax = 1e6 + 5; ll act = 0; vector<int> v[Nmax], w[Nmax]; int n, q; ll ans[Nmax]; int t[Nmax], sz[Nmax]; ll take2(int x) { return (ll)x*(x+1)/2; } int boss(int x) { if(x == t[x]) return x; return t[x] = boss(t[x]); } void unite(int x, int y) { x = boss(x); y = boss(y); act -= take2(sz[y]) + take2(sz[x]); if(sz[x] > sz[y]) swap(x, y); t[x] = y; sz[y] += sz[x]; act += take2(sz[y]); } void add(int x) { sz[x] = 1; t[x] = x; ++act; if(sz[x-1]) unite(x, x-1); if(sz[x+1]) unite(x, x+1); } int main() { // freopen("input", "r", stdin); cin.sync_with_stdio(false); cin.tie(0); cin >> n >> q; int i; for(i=1; i<=n; ++i) { int x; cin >> x; w[x].push_back(i); } for(i=1; i<=q; ++i) { int x; cin >> x; v[x].push_back(i); } for(i=1; i<=Nmax-5; ++i) { for(auto it : w[i]) add(it); for(auto it : v[i]) ans[it] = act; } for(i=1; i<=q; ++i) cout << ans[i] << '\n'; 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...