Submission #201795

#TimeUsernameProblemLanguageResultExecution timeMemory
201795mdn2002Vudu (COCI15_vudu)C++14
42 / 140
1010 ms65540 KiB
#include<bits/stdc++.h> using namespace std; const int mod=1e9+7; long long n,p,sum[1000006],tree[6000006]; vector<long long>pr; map<long long,int>mp; void up(int nod,int l,int r,int x) { if(x<l||r<x)return; if(l==r) { tree[nod]++; return; } int mid=(l+r)/2; up(nod*2,l,mid,x); up(nod*2+1,mid+1,r,x); tree[nod]=tree[nod*2]+tree[nod*2+1]; } long long qr(int nod,int l,int r,int x,int y) { if(x<=l&&r<=y)return tree[nod]; if(r<x||y<l)return 0; int mid=(l+r)/2; return qr(nod*2,l,mid,x,y)+qr(nod*2+1,mid+1,r,x,y); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen("empty.in","r",stdin); //freopen("empty.out","w",stdout); cin>>n; for(int i=0;i<n;i++) { long long x; cin>>x; sum[i]=sum[i-1]+x; } cin>>p; for(int i=0;i<n;i++) { long long x=p-sum[i]+(p*i); long long y=-sum[i-1]+(p*i); pr.push_back(x); pr.push_back(y); } sort(pr.begin(),pr.end()); int cnt=1; for(int i=0;i<pr.size();i++) { if(mp[pr[i]]==0)mp[pr[i]]=cnt++; } long long ans=0; for(int i=0;i<n;i++) { long long x=mp[p-sum[i]+(p*i)]; long long y=mp[-sum[i-1]+(p*i)]; up(1,0,pr.size()+4,y); ans+=qr(1,0,pr.size()+4,x,pr.size()+4); } cout<<ans; }

Compilation message (stderr)

vudu.cpp: In function 'int main()':
vudu.cpp:51:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<pr.size();i++)
                 ~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...