답안 #331057

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
331057 2020-11-27T07:47:12 Z pit4h Worst Reporter 3 (JOI18_worst_reporter3) C++14
100 / 100
807 ms 37356 KB
#include<bits/stdc++.h>
#define st first
#define nd second
#define mp make_pair
#ifndef LOCAL
#define cerr if(0)cerr
#endif
using namespace std;
using ll = long long;
using ld = long double;
using vi = vector<int>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int N = 5e5+1, inf = 1e9+1;
int n, q;
int d[N];
int ans[N];
struct Q {
	int t, l, r, id;
	bool operator<(const Q& o) const {
		return t < o.t;
	}
};
vector<Q> queries;

pii jump[N]; // st - dist, nd - t
ll get_pos(int x, int t) {
	return -x + jump[x].st * (t/jump[x].nd);
}
int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin>>n>>q;	
	for(int i=1; i<=n; ++i) {
		cin>>d[i];
	}

	jump[0] = mp(1, 1);
	for(int i=1; i<=n; ++i) {
		jump[i] = mp(0, inf);
		ll lo = 1, hi = inf, mid;
		while(lo<=hi) {
			mid = (lo+hi)/2;
			if(get_pos(i-1, mid) - (-i) > d[i]) {
				jump[i] = mp(get_pos(i-1, mid)-1 - (-i), mid);
				hi = mid-1;
			}
			else {
				lo = mid+1;
			}
		}
	}

	queries.resize(q);
	for(int i=0; i<q; ++i) {
		cin>>queries[i].t>>queries[i].l>>queries[i].r;
		queries[i].id = i;
	}
	sort(queries.begin(), queries.end());
	
	for(auto qry: queries) {
		auto bs = [](bool find_leftmost, Q& qq)->int {
			int lo = 0, hi = n, mid;
			int res = -1;
			while(lo<=hi) {
				mid = (lo+hi)/2;
				if(get_pos(mid, qq.t) < qq.l) {
					hi = mid-1;
				}
				else if(get_pos(mid, qq.t) > qq.r) {
					lo = mid+1;
				}
				if(get_pos(mid, qq.t) >= qq.l && get_pos(mid, qq.t) <= qq.r) {
					res = mid;
					if(find_leftmost) hi = mid-1;	
					else lo = mid+1;
				}
			}
			return res;
		};
		int leftmost = bs(1, qry);
		int rightmost = bs(0, qry);
		if(leftmost == -1) ans[qry.id] = 0;
		else {
			ans[qry.id] = rightmost - leftmost + 1;
		}
	}
	for(int i=0; i<q; ++i) {
		cout<<ans[i]<<'\n';
	}
}

# 결과 실행 시간 메모리 Grader output
1 Correct 778 ms 34576 KB Output is correct
2 Correct 807 ms 34448 KB Output is correct
3 Correct 776 ms 34600 KB Output is correct
4 Correct 772 ms 34412 KB Output is correct
5 Correct 772 ms 34540 KB Output is correct
6 Correct 789 ms 34632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 2 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 2 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 778 ms 34576 KB Output is correct
2 Correct 807 ms 34448 KB Output is correct
3 Correct 776 ms 34600 KB Output is correct
4 Correct 772 ms 34412 KB Output is correct
5 Correct 772 ms 34540 KB Output is correct
6 Correct 789 ms 34632 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 2 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 2 ms 364 KB Output is correct
13 Correct 504 ms 33048 KB Output is correct
14 Correct 512 ms 33644 KB Output is correct
15 Correct 486 ms 32252 KB Output is correct
16 Correct 518 ms 32748 KB Output is correct
17 Correct 583 ms 37228 KB Output is correct
18 Correct 591 ms 37064 KB Output is correct
19 Correct 590 ms 37356 KB Output is correct
20 Correct 587 ms 36972 KB Output is correct
21 Correct 586 ms 37228 KB Output is correct
22 Correct 607 ms 37228 KB Output is correct
23 Correct 584 ms 36972 KB Output is correct
24 Correct 591 ms 37120 KB Output is correct
25 Correct 769 ms 34540 KB Output is correct
26 Correct 769 ms 34668 KB Output is correct
27 Correct 638 ms 36588 KB Output is correct
28 Correct 625 ms 36844 KB Output is correct
29 Correct 629 ms 36484 KB Output is correct
30 Correct 659 ms 36716 KB Output is correct
31 Correct 637 ms 36968 KB Output is correct
32 Correct 629 ms 33132 KB Output is correct
33 Correct 1 ms 364 KB Output is correct