Submission #1350943

#TimeUsernameProblemLanguageResultExecution timeMemory
1350943Jawad_Akbar_JJWorst Reporter 3 (JOI18_worst_reporter3)C++20
100 / 100
674 ms5412 KiB
#include <iostream>
#include <vector>

using namespace std;
vector<int> Nw = {0};
int d[1<<19], cnt[1<<19];

void Add(int &ans, int l1, int r1, int l2, int r2){
	ans += max(0, min(r1, r2) - max(l1, l2) + 1);
}

int main(){
	int n, q;
	cin>>n>>q;

	d[0] = 1;
	for (int i=1;i<=n;i++){
		cin>>d[i];

		if (d[i] > d[i-1]){
			Nw.push_back(i);
			d[i] = ((d[i] + d[i-1] - 1) / d[i-1]) * d[i-1];
		}
		else
			d[i] = d[i-1], cnt[Nw.back()]++;
	}

	for (int i=1;i<=q;i++){
		int t, l, r, ans = 0;
		cin>>t>>l>>r;
		for (int j : Nw){
			int L = t - (t % d[j]) - j;
			Add(ans, l, r, L - cnt[j], L);
		}
		cout<<ans<<'\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...