제출 #1295493

#제출 시각아이디문제언어결과실행 시간메모리
1295493WH8Sum Zero (RMI20_sumzero)C++20
22 / 100
203 ms25784 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #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> v(n+1, 0), ps(n+1, 0); for(int i=1;i<=n;i++){ cin>>v[i]; ps[i]=ps[i-1]+v[i]; } map<int,int> m; vector<vector<int>> up(n+1, vector<int>(20, -1)); vector<int> dp(n+2, 0); int mnto=n+1; for(int i=n;i>=0;i--){ int nxt=m[ps[i]]; if(nxt != 0) mnto=min(mnto, nxt); m[ps[i]]=i; up[i][0]=(mnto <= n ? mnto : -1); } //~ for(int i=0;i<=n;i++){ //~ cout<<up[i][0]<<" "; //~ } //~ cout<<endl; //~ return 0; int q;cin>>q; for(int j=1;j<20;j++){ for(int i=0;i<=n;i++){ if(up[i][j-1] != -1)up[i][j]=up[up[i][j-1]][j-1]; } } //~ printf("up[0][1] is %lld\n", up[0][1]); for(int qind=0;qind<q;qind++){ int a,b;cin>>a>>b; a--; int ans=0; int cur=a; for(int j=19;j>=0;j--){ //~ printf("up[%lld][%lld] = %lld]\n", cur, j, up[cur][j]); if(up[cur][j] != -1 and up[cur][j] <= b){ ans+=(1<<j); cur=up[cur][j]; } } cout<<ans<<'\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...