Submission #237328

#TimeUsernameProblemLanguageResultExecution timeMemory
237328mohamedsobhi777Vudu (COCI15_vudu)C++14
112 / 140
1087 ms61776 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 7; int n, k; int a[N]; vector<long long> srtd ; unordered_map<long long, int > mp ; int bit[N] ; int read_int() { char r; bool start = false, neg = false; int ret = 0; while (true) { r = getchar(); if ((r - '0' < 0 || r - '0' > 9) && r != '-' && !start) { continue; } if ((r - '0' < 0 || r - '0' > 9) && r != '-' && start) { break; } if (start) ret *= 10; start = true; if (r == '-') neg = true; else ret += r - '0'; } if (!neg) return ret; else return -ret; } void add(int x){ for(;x < N ;x += x&-x ){ bit[x] ++ ; } } int get(int x){ if(x < 0 ) return 0; int ret =0 ; for(;x;x-=x&-x){ ret+=bit[x] ; } return ret ; } int t =1 ; int com(long long x){ int ret = mp[x] ; if(ret)return ret ; mp[x] = t++ ; return t-1 ; } void init(){ srtd.push_back(0) ; sort(srtd.begin() , srtd.end()) ; for(int i = 0 ; i < (int) srtd.size() ;i++){ com(srtd[i]) ; } } int main() { //freopen("in.in", "r", stdin); n = read_int() ; for (int i = 0; i < n; i++) { a[i] = read_int() ; } k = read_int(); long long sum = 0 ; for (int i = 0; i < n; i++) { a[i] -= k; sum+= a[i] ; srtd.push_back(sum) ; } init() ; long long ans = 0; long long pre = 0; add(com(0)) ; for (int i = 0; i < n; i++) { pre += a[i]; int aux = com(pre) ; ans+= get(aux) ; add(aux) ; } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...