Submission #766994

#TimeUsernameProblemLanguageResultExecution timeMemory
766994Tenis0206Exercise Deadlines (CCO20_day1problem2)C++11
25 / 25
110 ms13432 KiB
#include <bits/stdc++.h> using namespace std; const int nmax = 2e5; int n; int v[nmax + 5]; int poz[nmax + 5]; set<int,greater<int>> s; int aib[nmax + 5]; int ub(int x) { return (x & (-x)); } void update(int poz, int val) { for(int i=poz;i<=n;i+=ub(i)) { aib[i] += val; } } int query(int qa, int qb) { int rez = 0; for(int i=qb;i>=1;i-=ub(i)) { rez += aib[i]; } for(int i=qa-1;i>=1;i-=ub(i)) { rez -= aib[i]; } return rez; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=1;i<=n;i++) { cin>>v[i]; s.insert(i); } for(int i=n;i>=1;i--) { auto it = s.lower_bound(v[i]); if(it==s.end()) { cout<<-1<<'\n'; return 0; } poz[i] = *it; s.erase(it); } long long rez = 0; for(int i=1;i<=n;i++) { rez += query(poz[i], n); update(poz[i],+1); } cout<<rez<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...