Submission #1272133

#TimeUsernameProblemLanguageResultExecution timeMemory
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...