Submission #329199

#TimeUsernameProblemLanguageResultExecution timeMemory
329199Mahdi_ShokoufiPilot (NOI19_pilot)C++17
89 / 100
1101 ms63340 KiB
//In The Name of Allah #pragma GCC optimize("O2") #pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair < int , int > pii; typedef pair < ll , ll > pll; #define X first #define Y second #define mp make_pair #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) (int)(x.size()) const int N = 1e6 + 10; const ll mod = 1e9 + 7; const int inf = 1e9 + 10; int a[N]; ll res[N]; vector < int > pos[N]; set < pii > seg; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, q; cin >> n >> q; for (int i = 1; i <= n; i ++) cin >> a[i], pos[a[i]].pb(i); ll tot = n * (n + 1) / 2; seg.insert(mp(n, 1)); for (int i = N - 10; i > 0; i --){ res[i] = tot; for (int x : pos[i]){ auto itr = seg.lower_bound(mp(x, -inf)); ll l = itr -> Y, r = itr -> X; tot -= (r - l + 1) * (r - l + 2) / 2; tot += (x - l) * (x - l + 1) / 2; tot += (r - x) * (r - x + 1) / 2; seg.erase(itr); if (l < x) seg.insert(mp(x - 1, l)); if (x < r) seg.insert(mp(r, x + 1)); } } for (int i = 0; i < q; i ++){ int x; cin >> x; cout << res[x] << '\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...