제출 #1272845

#제출 시각아이디문제언어결과실행 시간메모리
1272845TaxiradioSum Zero (RMI20_sumzero)C++20
0 / 100
8 ms828 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	int n; cin >> n;
	vector<int> a ={0};
	vector<int> c ={0};
	for(int i = 0; i < n; i++){
		int b; cin >> b;
		a.push_back(b);
		c.push_back(c.back() + b);
	}
	vector<int> dp(n+2 , n+1);
	map<int , int> e;
	for(int i = n; i > 0; i--){
		e[c[i]] = i;
		dp[i] = dp[i+1];
		if(e[c[i-1]] != 0){
			dp[i] = min(dp[i] , e[c[i-1]]+1);
		}
	}
	vector<int> v(n+2);
	vector<array<int , 20>> bl(n+2);
	for(int i = 0; i < 20; i++)bl.back()[i] = n+1;
	for(int i = n; i > 0; i--){
		bl[i][0] = dp[i];
		for(int j = 1; j < 20; j++){
			bl[i][j] = bl[bl[i][j-1]][j-1];
		}
		v[i] = v[dp[i]]+1;
	}
	int q; cin >> q;
	while(q--){
		int l , r; cin >> l >> r;
		int w = l;
		for(int i = 19; i >= 0; i--){
			if(bl[w][i]-1 <= r)w = bl[w][i];
		}
		cout << v[l]-v[w] << "\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...