Submission #1295501

#TimeUsernameProblemLanguageResultExecution timeMemory
1295501WH8Sum Zero (RMI20_sumzero)C++20
61 / 100
479 ms52984 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> 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<int> up(n+1);
	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;
		up[i]=(mnto <= n ? mnto : n+1);
		ch[up[i]].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...