Submission #965460

#TimeUsernameProblemLanguageResultExecution timeMemory
965460red24Pilot (NOI19_pilot)C++14
0 / 100
44 ms40284 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define vi vector<int> #define pi pair<int, int> #define vpi vector<pi> #define vvi vector<vi> #define mp make_pair #define pb push_back #define all(x) x.begin()+1, x.end() const int INF = (int)1e17; vi parent, siz; void make(int x) { parent[x] = x; siz[x] = 1; } int find(int x) { if (parent[x] == x) return x; return parent[x] = find(parent[x]); } void unite(int x, int y) { x = find(x); y = find(y); if (siz[x] < siz[y]) swap(x, y); parent[y] = x; siz[x] += siz[y]; } int f(int x) { return ((x)*(x+1))/2ll; } void solve() { int n, q; cin >> n >> q; vi a(n+2); for (int i = 1; i <= n; i++) cin >> a[i]; const int mx = (int)1e6 + 69420; parent = vi(n+10); siz = vi(n+10); vi ans(mx+1); vvi idx(mx+1); for (int i = 1; i <= n; i++) { idx[a[i]].pb(i); } int res = 0; for (int i = 1; i <= n+9; i++) make(i); a[0] = INF; a[n+1] = INF; for (int el = 1; el <= mx-100; el++) { for (auto i : idx[el]) { // check if we can merge if (a[i+1] <= el && a[i-1] <= el) { res -= f(siz[find(i+1)]); res -= f(siz[find(i-1)]); unite(i, i+1); unite(i, i-1); res += f(siz[find(i)]); } else if (a[i+1] <= el) { res -= f(siz[find(i+1)]); unite(i, i+1); res += f(siz[find(i)]); } else if (a[i-1] <= el) { res -= f(siz[find(i+1)]); unite(i, i+1); res += f(siz[find(i)]); } else { res++; } } ans[el] = res; } while (q--) { int x; cin >> x; cout << ans[x] << '\n'; } } int32_t main() { auto begin = std::chrono::high_resolution_clock::now(); // FASTIO ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int T = 1; //cin >> T; for (int i = 1; i <= T; i++) { //cout << "Case #" << i << ": "; solve(); } auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\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...