Submission #98778

#TimeUsernameProblemLanguageResultExecution timeMemory
98778someone_aaVudu (COCI15_vudu)C++17
42 / 140
835 ms66560 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define mp make_pair #define P pair<ll, ll> using namespace std; const int maxn = 1000100; const int maxm = 3 * maxn; int tree[maxm], m; void update(int x,int val) { while(x<=m) { tree[x]+=val; x+=(x&-x); } } int query(int x) { int res=0; while(x>0) { res+=tree[x]; x-=(x&-x); } return res; } ll n, d, arr[maxn]; map<ll, int> ind; set<ll>values; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=1;i<=n;i++) { cin>>arr[i]; } cin>>d; ll sum = 0LL; for(ll i=1LL;i<=n;i++) { values.insert(sum - d*i); sum += arr[i]; values.insert(sum - d*i - d); } int br = 1; for(ll i:values) { ind[i] = br++; } m = br; sum = 0LL; ll result = 0LL; for(int i=1;i<=n;i++) { update(ind[sum - d*i], 1); //cout<<i<<": "<<sum-d*i<<", "<<ind[sum-d*i]<<" -> "; sum += arr[i]; result += 1LL * query(ind[sum - d*i - d]); //cout<<sum - d*i - d<<", "<<ind[sum-d*i-d]<<"\n"; } cout<<result<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...