Submission #165423

#TimeUsernameProblemLanguageResultExecution timeMemory
165423Atill83Vudu (COCI15_vudu)C++14
112 / 140
1083 ms16136 KiB
#include <bits/stdc++.h>
#define ff first
#define ss second
#define endl '\n'
using namespace std;
const long long INF = (long long) 1e18;
const int mod = (int) 1e9+7;
const int MAXN = (int) 1e6+5;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ll n;
ll a[MAXN];
ll P;
ll do_it(int l, int r){
    if(l == r){
        return a[l] >= P;
    }else{
        int m = (l + r)/2;
        vector<ll> diger;
        ll curSm = 0;
        for(int j = m; j >= l; j--){
            ll len = (m - j + 1);
            curSm += a[j];
            diger.push_back(curSm - P*len);
        }
        sort(diger.begin(), diger.end());
        curSm = 0;
        ll ans = 0;
        for(int j = m + 1; j <= r; j++){
            curSm += a[j];
            ll cur = curSm - (j - m)*P;
            ll cnt = diger.end() - lower_bound(diger.begin(), diger.end(),-cur);
            ans += cnt;
        }
        return ans + do_it(l, m) + do_it(m + 1, r);
    }
}



int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);

    #ifdef Local
        freopen("../IO/int.txt","r",stdin);
        freopen("../IO/out.txt","w",stdout);
    #endif

    cin>>n;

    for(int i = 1; i <= n; i++){
        cin>>a[i];
    }
    cin>>P;
    cout<<do_it(1, n)<<endl;
    #ifdef Local
        cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds ";
    #endif
}
#Verdict Execution timeMemoryGrader output
Fetching results...