Submission #66417

#TimeUsernameProblemLanguageResultExecution timeMemory
66417forestryksVudu (COCI15_vudu)C++14
140 / 140
452 ms16408 KiB
/////////////////////////////////////////////////////////////////////////////////////////////// #include <bits/stdc++.h> using namespace std; // #define int long long #define FAST_IO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define FILE_IO(x) freopen((string(x) + ".in").c_str(), "r", stdin); freopen((string(x) + ".out").c_str(), "w", stdout) #define f first #define s second #define x1 x1qwer #define y1 y1qwer #define right right123 #define left left123 #define foreach(it, v) for (auto it : v) #define rep(it, n) for (int it = 0; it < n; ++it) #define forin(it, l, r) for (int it = l; it < r; ++it) #define all(x) x.begin(), x.end() typedef long long ll; typedef unsigned long long ull; typedef double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const double DINF = numeric_limits<double>::infinity(); const ll MOD = 1e9 + 7; const double EPS = 1e-7; ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; } mt19937 mmtw_(MOD); uniform_int_distribution<ll> rd_; ll randomll() { return rd_(mmtw_);} ll rnd(ll x, ll y) { return rd_(mmtw_) % (y - x + 1) + x; } template <class T> T fact(T n) { if (n == 1) return 1; return n * fact(n - 1); } //////////////////////////////////////////////////////////////////////////////////////////////// const int MAXN = 1e6 + 5; int n; ll a[MAXN]; ll t[MAXN]; ll p; void compress() { vector<long long> val(a, a + n); sort(val.begin(), val.end()); val.resize(unique(val.begin(), val.end()) - val.begin()); for (int i = 0; i < n; ++i) { a[i] = lower_bound(val.begin(), val.end(), a[i]) - val.begin(); } } void add(int pos) { for (int i = pos; i < n; i = (i | (i + 1))) { t[i]++; } } ll get(int r) { ll res = 0; for (int i = r; i >= 0; i = (i & (i + 1)) - 1) { res += t[i]; } return res; } int main() { FAST_IO; cin >> n; rep(i, n) { cin >> a[i + 1]; } cin >> p; n++; partial_sum(a, a + n, a); for (int i = 0; i < n; ++i) { a[i] = a[i] - p * i; } compress(); ll res = 0; for (int r = 0; r < n; ++r) { res += get(a[r]); add(a[r]); } cout << res << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...