Submission #246475

#TimeUsernameProblemLanguageResultExecution timeMemory
246475bibabasVudu (COCI15_vudu)C++14
140 / 140
829 ms57976 KiB
#include <bits/stdc++.h> #define ll long long #define ull unsigned ll #define vi vector<ll> #define vvi vector<vi> #define all(x) x.begin(), x.end() #define pb push_back #define mp make_pair #define ld long double #define pii pair<ll, ll> #define mt make_tuple #define mn(a, b) a = min(a, b) #define mx(a, b) a = max(a, b) using namespace std; const ll INF = (ll)2e9; const ll inf = (ll)2e18; const ld eps = (ld)1e-8; const ll mod = (ll)10007; const ll MAXN = (ll)1e4 + 1; const ll MAXC = (ll)1e6 + 1; const ll MAXE = (ll)1000; const ll MAXLOG = 21; const ll maxlen = (ll)1e5; const ll asci = (ll)256; const ll block = 480; const ld PI = acos(-1); const ld e = 2.7182818284; /*#include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; typedef tree< pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;*/ template <class T> istream& operator >>(istream &in, vector<T> &arr){ for (T &cnt : arr) { in >> cnt; } return in; }; struct stree{ vi t; stree (ll n) { t.resize(4 * n); } void upd(ll v, ll tl, ll tr, ll pos) { if (tl + 1 == tr) return void(t[v]++); ll tm = (tl + tr) / 2; if (pos < tm) upd(2 * v, tl, tm, pos); else upd(2 * v + 1, tm, tr, pos); t[v]++; } ll ask(ll v, ll tl, ll tr, ll l, ll r) { if (l <= tl && tr <= r) return t[v]; if (tl >= r || l >= tr) return 0; ll tm = (tl + tr) / 2; return ask(2 * v, tl, tm, l, r) + ask(2 * v + 1, tm, tr, l, r); } }; void solve() { ll n; cin >> n; vi a(n); cin >> a; ll p; cin >> p; vi pref(n + 1); for (ll i = 0; i < n; ++i) pref[i + 1] = pref[i] + a[i] - p; vi vals = pref; sort(all(vals)); vals.resize(unique(all(vals)) - vals.begin()); stree t(vals.size()); ll ans = 0; for (ll i = 0; i <= n; ++i) { ans += t.ask(1, 0, vals.size(), 0, upper_bound(all(vals), pref[i]) - vals.begin()); t.upd(1, 0, vals.size(), lower_bound(all(vals), pref[i]) - vals.begin()); } cout << ans; } signed main() { srand(time(0)); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #endif cout.precision(30); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...