제출 #1156621

#제출 시각아이디문제언어결과실행 시간메모리
1156621spycoderytVudu (COCI15_vudu)C++20
42 / 140
998 ms131072 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int N = 2e6+5; const int off = N/2; int fen[N]; void add(int pos,int val) { for(int i = pos;i<N;i+=i&-i)fen[i]+=val; } int sum(int pos){ int res=0; for(int i = pos;i>0;i-=i&-i)res+=fen[i]; return res; } int32_t main() { cin.tie(0)->sync_with_stdio(0); int n,p,cur=0,ans=0; cin >> n; vector<int>v(n+1),pref(n+1); for(int i = 1;i<=n;i++)cin>>v[i]; cin>>p; for(int i = 1;i<=n;i++)v[i] -= p; for(int i = 1;i<=n;i++)v[i] += v[i-1]; map<int,int> mp; int cnt = 1; set<int>st; for(auto e : v) st.insert(e); st.insert(0); for(auto e : st) mp[e]=cnt++; add(mp[0],1); for(int i = 1;i<=n;i++) { // cur - pref >= 0 so pref <= cur ans+=sum(mp[v[i]]); add(mp[v[i]],1); // if(v[i]>=0)ans++; // cerr<<ans<<"\n"; } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...