제출 #1241973

#제출 시각아이디문제언어결과실행 시간메모리
1241973m.zeeshanrashidSum Zero (RMI20_sumzero)C++20
61 / 100
305 ms53328 KiB
// #ifdef __AVX2__ // #pragma GCC target "avx2" // #endif #pragma GCC optimize "O3" #pragma GCC optimize "unroll-loops" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; #define int long long #define elif else if #define all(l) begin(l),end(l) #define rall(l) rbegin(l),rend(l) #define append push_back #define print(l) for(auto i:l) cout<<i<<' '; cout<<endl; #define pprint(a,b) cout<<a<<' '<<b<<endl; #define inp(l) for(auto &i:l) cin>>i; #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> #define pai make_pair #define endl "\n" #define pii pair<int,int> #define fi first #define se second #define vec vector const int mod1=998244353; const int mod=1e9+7; const int N=4e5+5,lg=12; int sp[N][lg]; int p3[lg]; int iter=1,itera=1; void solve(){ p3[0]=1; for(int i=1;i<lg;i++) p3[i]=p3[i-1]*3; int n,q; cin>>n; int c[n+1]; for(int i=1;i<=n;i++) cin>>c[i]; map<int,int>d; int s=0; for(int i=1;i<=n;i++){ s+=c[i]; d[s]=-1; } d[0]=0; s=0; for(int i=0;i<=n;i++){ for(int j=0;j<lg;j++) sp[i][j]=-1; } for(int i=1;i<=n;i++){ s+=c[i]; sp[i][0]=max(sp[i-1][0],d[s]+1); for(int j=1;j<lg;j++){ if(sp[i][j-1]<1){ break; } int a=sp[sp[i][j-1]-1][j-1]; if(a<1){ break; } sp[i][j]=sp[a-1][j-1]; } d[s]=i; } cin>>q; for(int i=0;i<q;i++){ int l,r; cin>>l>>r; int ans=0; for(int j=lg-1;j>=0;j--){ for(int xyz=0;xyz<2;xyz++){ if(sp[r][j]>=l){ ans+=p3[j]; r=sp[r][j]-1; } } } cout<<ans<<endl; } } signed main(){ // freopen("","r",stdin); // freopen("","w",stdout); ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // cin>>itera; for(iter=1;iter<=itera;iter++) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...