제출 #1272133

#제출 시각아이디문제언어결과실행 시간메모리
1272133ahmd_ibraaaVudu (COCI15_vudu)C++20
140 / 140
239 ms23972 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define ll long long #define double long double #define medal ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); #define fi first #define sec second #define endl '\n' const int maxn = 1e6+10; int fw[maxn]; void update(int id){ for(int i=id; i<maxn; i+=(i&-i)){ fw[i]++; } } int query(int id){ int ret = 0; for(int i=id; i>=1; i-=(i&-i)){ ret+=fw[i]; } return ret; } signed main(){ medal unsigned int n; cin>>n; unsigned int a[n+1]; for(unsigned int i=1; i<=n; i++){ cin>>a[i]; } unsigned int p; cin>>p; ll ans = 0; ll pref[n+1]; vector<ll> vec; pref[0] = 0; vec.push_back(0); for (int i = 1; i<=n; i++){ pref[i] = pref[i-1]+a[i]-p; vec.push_back(pref[i]); } sort(vec.begin(), vec.end()); for(int i=0; i<=n; i++){ pref[i] = upper_bound(vec.begin(), vec.end(), pref[i]) - vec.begin(); pref[i]++; } update(pref[0]); for(unsigned int i=1; i<=n; i++){ unsigned int cnt = query(pref[i]); ans += cnt; update(pref[i]); } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...