Submission #1230213

#TimeUsernameProblemLanguageResultExecution timeMemory
1230213altern23Vudu (COCI15_vudu)C++20
140 / 140
232 ms23896 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define pii pair<ll, ll>
#define fi first
#define sec second
#define ld long double

const int MAXN = 1e6;
const ll INF = 1e18;
const int MOD = 1e9 + 7;

ll a[MAXN + 5];

struct BIT{
	ll N;
	vector<ll> bit;
	BIT(ll _n){
		N = _n;
		bit.resize(N + 5);
	}
	
	void upd(ll idx, ll val){
		for(; idx <= N; idx += idx & -idx) bit[idx] += val;
	}
	ll get(ll idx){
		ll ans = 0;
		for(; idx >= 1; idx -= idx & -idx) ans += bit[idx];
		return ans;
	}
	ll query(ll l, ll r) { return get(r) - get(l - 1); }
};

int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int tc = 1;	
	// cin >> tc;
	for(;tc--;){
		ll N; cin >> N;
		vector<ll> v;
		v.push_back(0);
		ll now = 0;
		for(ll i = 1; i <= N; i++){
			cin >> a[i];
		}
		
		ll K; cin >> K;
		for(ll i = 1; i <= N; i++){
			now += a[i];
			v.push_back(now - i * K);
		}
		
		sort(v.begin(), v.end());
		v.erase(unique(v.begin(), v.end()), v.end());
		
		ll M = v.size();
		BIT bit(M);
		bit.upd(lower_bound(v.begin(), v.end(), 0) - v.begin() + 1, 1LL);
		
		now = 0;
		ll ans = 0;
		for(ll i = 1; i <= N; i++){
			now += a[i];
			ll pos = lower_bound(v.begin(), v.end(), now - i * K) - v.begin() + 1;
			ans += bit.query(1, pos);
			bit.upd(pos, 1);
		}
		
		cout << ans << "\n";
	}
}

/*

*/
#Verdict Execution timeMemoryGrader output
Fetching results...