Submission #946672

#TimeUsernameProblemLanguageResultExecution timeMemory
946672NourWaelVudu (COCI15_vudu)C++17
140 / 140
417 ms46768 KiB
#include <bits/extc++.h> using namespace std; int const mxN = 1e6+1; long long a[mxN + 1]; int seg[4*mxN]; int val[mxN+1]; int get ( int node, int l, int r, int ind) { if(ind<l) return 0; if(r-1<=ind) return seg[node]; int m = (l+r) / 2; return get(node*2+1, l, m, ind) + get(node*2+2, m, r, ind); } void update ( int node, int l, int r, int ind) { if(ind<l || ind>=r) return; if(l==r-1 && l==ind) { seg[node] += 1; return; } int m = (l+r) / 2; update(node*2+1, l, m, ind), update(node*2+2, m, r, ind); seg[node] = seg[node*2+1] + seg[node*2+2]; } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); long long n,p, ans = 0, ind = 0; cin>>n; for(int i=0; i<n; i++) cin>>a[i]; cin>>p; vector<pair<long long,int>> st; st.push_back({p,n}); for(int i=0; i<n; i++) { a[i] += (i? a[i-1]:0); long long x = a[i] - p*i; st.push_back({x,i}); } sort(st.begin(),st.end()); val[st[0].second] = 0; for(int i=1; i<st.size(); i++) { if(st[i].first==st[i-1].first) { val[st[i].second] = val[st[i-1].second]; continue; } ind++; val[st[i].second] = ind; } st.clear(); int pw = (1<<(__lg(ind-1)+1)); update(0,0,pw, val[n]); for(int i=0; i<n; i++) { long long x = val[i]; ans += get(0,0,pw, x); update(0,0,pw,x); } cout<<ans; return 0; }

Compilation message (stderr)

vudu.cpp: In function 'int main()':
vudu.cpp:41:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |    for(int i=1; i<st.size(); i++) {
      |                 ~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...