제출 #1295503

#제출 시각아이디문제언어결과실행 시간메모리
1295503WH8Sum Zero (RMI20_sumzero)C++20
61 / 100
403 ms50792 KiB
#include <bits/stdc++.h> using namespace std; #define pll pair<int, int> #define mp make_pair #define pb push_back #define f first #define s second #define endl '\n' #define ld long double #define sz(x) static_cast<int>((x).size()) #define i5 tuple<int,int,int,int,int> signed main(){ int n;cin>>n; vector<int> ps(n+1, 0); for(int i=1;i<=n;i++){ int c;cin>>c; ps[i]=ps[i-1]+c; } map<int,int> m; int mnto=n+1; vector<vector<int>> ch(n+2); for(int i=n;i>=0;i--){ int nxt=m[ps[i]]; if(nxt != 0) mnto=min(mnto, nxt); m[ps[i]]=i; int up=(mnto <= n ? mnto : n+1); ch[up].pb(i); //~ printf("i %d, up %d\n", i, up[i]); } //~ for(int i=0;i<=n;i++){ //~ cout<<up[i][0]<<" "; //~ } //~ cout<<endl; //~ return 0; int q;cin>>q; //~ printf("up[0][1] is %lld\n", up[0][1]); vector<vector<pair<int,int>>> qs(n+2); vector<int> ans(q+1, 0); for(int qind=0;qind<q;qind++){ int a,b;cin>>a>>b; qs[a-1].pb({b, qind}); } vector<int> st; auto dfs=[&](auto && dfs, int x)->void{ st.pb(x); //~ cout<<x<<endl; for(auto [en, qind] : qs[x]){ ans[qind]=st.end()-1-lower_bound(st.begin(),st.end(),en,greater<int>()); } for(auto it: ch[x]){ dfs(dfs, it); } st.pop_back(); }; dfs(dfs, n+1); for(int i=0;i<q;i++){ cout<<ans[i]<<"\n"; } } /* 10 1 2 -3 0 1 -4 3 2 -1 1 3 1 10 1 5 2 9 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...