#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
#define inf LLONG_MAX
#define ti tuple<int,int,int>
const int lim=1e6;
vector<int>tri(lim+10);
map<int,int>cm;
int n,m;
int seek(int x){
int cnt=0;
while(x>=1){
cnt+=tri[x];
x-=x&-x;
}
return cnt;
}
void upd(int x){
while(x<=n){
tri[x]++;
x+=x&-x;
}
}
signed main(){
cin>>n;vector<int>a(n+1);for(int i=1;i<=n;i++) cin>>a[i];
int p;cin>>p;
int pref=0;
int ans=0;
set<int>c;
for(int i=1;i<=n;i++){
pref+=a[i];
a[i]=pref-p*i;
c.insert(a[i]);
}
c.insert(0);
vector<int>sorted;
for(auto x:c) sorted.pb(x);
for(int i=0;i<sorted.size();i++){
cm[sorted[i]]=i+1;
}
m=sorted.size();
upd(cm[0]);
for(int i=1;i<=n;i++){
// cout<<"cek "<<cm[a[i]]<<" "<<seek(cm[a[i]])<<endl;
ans+=seek(cm[a[i]]);
upd(cm[a[i]]);
// cout<<i<<" "<<seek(cm[a[i]])<<endl;
}
cout<<ans;
}
// (pref[r]-pref[l-1])>= p(r-l+1)
// pref[r]-pr>=pref[l-1]-pl+p
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |