Submission #1230398

#TimeUsernameProblemLanguageResultExecution timeMemory
1230398warrennVudu (COCI15_vudu)C++20
42 / 140
1101 ms125620 KiB
#include<bits/stdc++.h> using namespace std; #define int long long int n,p; int a[1000002]; int b[1000002]; int pref[1000002]; map<int,int>conv; int cnt=1; vector<int>tmp,st; void update(int idx,int l,int r,int pos,int val){ if(l==r){ st[idx]+=val; return ; } int mid=(l+r)/2; if(pos<=mid)update(2*idx,l,mid,pos,val); else update(2*idx+1,mid+1,r,pos,val); st[idx]=st[2*idx]+st[2*idx+1]; } int query(int idx,int l,int r,int posl,int posr){ if(l>=posl && r<=posr)return st[idx]; if(l>posr || r<posl)return 0; int mid=(l+r)/2; return query(2*idx,l,mid,posl,posr)+query(2*idx+1,mid+1,r,posl,posr); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n; for(int q=1;q<=n;q++){ cin>>a[q]; } cin>>p; for(int q=1;q<=n;q++){ pref[q]=pref[q-1]+a[q]; b[q]=pref[q]-p*q; tmp.push_back(b[q]); } tmp.push_back(0); sort(tmp.begin(),tmp.end()); for(int q=0;q<tmp.size();q++){ if(q==0 || tmp[q-1]!=tmp[q]){ conv[tmp[q]]=cnt; cnt++; } } st=vector<int>(4*cnt+1,0); int ans=0; update(1,1,cnt,conv[0],1); for(int q=1;q<=n;q++){ ans+=query(1,1,cnt,1,conv[b[q]]); // cout<<ans<<" "<<conv[b[q]]<<endl; update(1,1,cnt,conv[b[q]],1); } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...