Submission #25521582


Source Code Expand

#include <algorithm>
#include <iostream>
#include <numeric>
#include <tuple>
#include <vector>
#define rep(i, n) for (int i=0; i<n; ++i)
#define rrep(i, n) for (int i=1; i<=n; ++i)
#define all(v) v.begin(), v.end()
#define pb push_back
using namespace std;
using ll=long long; using pp=pair<int,int>;
using vi=vector<int>; using vll=vector<ll>;
const int maxn = int(2e5) + 10;

int n;

struct MergeSortTree {
	const static int M = 262144;
	vll t[M<<1];
	void add_point(int x, ll y) { for (x+=M; x; x/=2) t[x].pb(y); }
	void init() {
		for (int i=1; i<M; ++i) sort(all(t[M+i]));
		for (int i=M-1; 1<=i; --i) {
			auto &v = t[i], &vl = t[i*2], &vr = t[i*2+1];
			if (vl.empty()) v = vr; else if (vr.empty()) v = vl;
			else v.resize(vl.size()+vr.size()), merge(all(vl), all(vr), v.begin());
		}
	}
	int rect(int l, int r, ll u) {
		int ret = 0;
		auto qv = [&](vll &v) { ret += (upper_bound(all(v), u)-v.begin()); };
		for (l+=M, r+=M; l<=r; l/=2, r/=2) {
			if (l%2==1) qv(t[l++]);
			if (r%2==0) qv(t[r--]);
		}
		return ret;
	}
	int rect(int l, int r, ll d, ll u) {
		int ret = 0;
		auto qv = [&](vll &v) { ret += (upper_bound(all(v), u)-lower_bound(all(v), d)); };
		for (l+=M, r+=M; l<=r; l/=2, r/=2) {
			if (l%2==1) qv(t[l++]);
			if (r%2==0) qv(t[r--]);
		}
		return ret;
	}
};

int nxt[maxn], nxtd[maxn];
vi apples[maxn];

namespace Step1 {
int m, L, C;
int person[maxn], apple[maxn];
void In() {
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> m >> L >> C;
	rrep(i, n) cin >> person[i];
	rrep(i, m) cin >> apple[i];
}

pp GetNxt(int pos) {
	int i = int(upper_bound(person+1, person+n+1, pos)-person)-1;
	if (i == 0) return {n, (L-person[n])+pos};
	else return {i, pos-person[i]};
}

void BuildNxt() {
	rrep(i, n) {
		int t = person[i]-C%L; if (t < 0) t += L;
		tie(nxt[i], nxtd[i]) = GetNxt(t);
		nxtd[i] += C;
	}
}

void AddApples() {
	rrep(i, m) {
		int j, d; tie(j, d) = GetNxt(apple[i]);
		apples[j].emplace_back(d);
	}
}

void Work() {
	In();
	BuildNxt(); AddApples();
}
}

int cn;
int myci[maxn];
int croots[maxn];
ll crdst[maxn];
ll clen[maxn];
vector<int> celem[maxn];
bool iscv[maxn];
int tin[maxn], tout[maxn];

namespace Step2 {
bool onstk[maxn];
void dfs1(int x) {
	onstk[x] = true;
	int y = nxt[x];
	if (!onstk[y]) {
		if (!myci[y]) dfs1(y);
		myci[x] = myci[y];
		crdst[x] = crdst[y] + nxtd[x];
		onstk[x] = false;
		return;
	}
	myci[x] = ++cn; croots[cn] = x; iscv[x] = true;
	celem[cn].pb(x);
	for (int y=nxt[x]; y!=x; y=nxt[y]) celem[cn].pb(y);
	onstk[x] = false;
}

vector<int> child[maxn];
int nt;
void dfs2(int x) {
	tin[x] = ++nt;
	for (int y:child[x]) {
		dfs2(y);
	}
	tout[x] = nt;
}

void BuildGraph() {
	rrep(i, n) if (!myci[i]) dfs1(i);
	rrep(i, n) if (celem[myci[i]][0] != i) child[nxt[i]].pb(i);
	rrep(i, cn) { int r = croots[i];
		for (int x:celem[i]) {
			iscv[x] = true;
			clen[i] += nxtd[x];
		}
		dfs2(r);
	}
}
}

MergeSortTree tconst, tinf;
vector<ll> rdl[maxn], rdp[maxn];
int xoff[maxn], xoz;
ll cp[maxn];

namespace Step3 {
void Build() {
	rrep(i, n) for (int ad:apples[i]) tconst.add_point(tin[i], crdst[i]+ad);
	tconst.init();

	rrep(v, n) for (int ad:apples[v]) rdl[myci[v]].pb(crdst[v]+ad);
	rrep(ci, cn) {
		sort(all(rdl[ci])), rdp[ci].resize(rdl[ci].size());
		xoff[ci] = xoz;
		xoz += rdl[ci].size();
	}

	rrep(v, n) for (int ad:apples[v]) {
		int ci = myci[v];
		auto &vl=rdl[ci], &vp=rdp[ci];
		ll tt = crdst[v] + ad, cl = clen[ci];
		int x = int(lower_bound(all(vl), tt)-vl.begin())+1;

		ll tn = tt/cl, tr = tt%cl;
		tn = -tn-1; tr = cl-tr;
		if (tr == cl) ++tn, tr = 0;

		tinf.add_point(xoff[ci]+x, tr);
		vp[x-1] += tn;
	}

	rrep(ci, cn) partial_sum(all(rdp[ci]), rdp[ci].begin());
	tinf.init();

	rrep(ci, cn) {
		ll pt = 0;
		for (int x:celem[ci]) cp[x]=pt, pt+=nxtd[x];
		cp[celem[ci][0]] = pt;
	}
}
}

int CountConst(int v, ll T) {
	return tconst.rect(tin[v], tout[v], crdst[v]+T);
}

ll CountInf(int v, ll T) {
	int ci = myci[v];
	ll p = cp[v], cl = clen[ci];
	ll np = (T-p)/cl, rp = (T-p)%cl;
	if (rp < 0) rp+=cl, --np;

	auto &vl = rdl[ci], &vp = rdp[ci];
	int xr = upper_bound(all(vl), T-p)-vl.begin();
	if (!xr) return 0;

	ll ret = xr * (1 + np) + (xr ? vp[xr-1] : 0);
	ret += tinf.rect(xoff[ci]+1, xoff[ci]+xr,
		cl-rp, cl);

	return ret;
}

int main() {
	Step1::Work();
	Step2::BuildGraph();
	Step3::Build();

	int q; cin >> q;
for (;q--;) {
	int v; ll T; cin >> v >> T;

	ll ans = CountConst(v, T);
	if (iscv[v]) ans += CountInf(v, T);

	cout << ans;
	cout << '\n';
}
	return 0;
}

Submission Info

Submission Time
Task H - 収穫 (Harvest)
User Namnamseo
Language C++ (GCC 9.2.1)
Score 100
Code Size 4670 Byte
Status AC
Exec Time 785 ms
Memory 170764 KiB

Judge Result

Set Name Subtask 1 Subtask 2 Subtask 3
Score / Max Score 5 / 5 20 / 20 75 / 75
Status
AC × 23
AC × 21
AC × 75
Set Name Test Cases
Subtask 1 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, sample-01.txt, sample-02.txt, sample-03.txt
Subtask 2 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, sample-03.txt
Subtask 3 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, 03-15.txt, 03-16.txt, 03-17.txt, 03-18.txt, 03-19.txt, 03-20.txt, 03-21.txt, 03-22.txt, 03-23.txt, 03-24.txt, 03-25.txt, 03-26.txt, 03-27.txt, 03-28.txt, 03-29.txt, 03-30.txt, 03-31.txt, 03-32.txt, sample-01.txt, sample-02.txt, sample-03.txt
Case Name Status Exec Time Memory
01-01.txt AC 52 ms 51616 KiB
01-02.txt AC 51 ms 53292 KiB
01-03.txt AC 52 ms 52996 KiB
01-04.txt AC 51 ms 53132 KiB
01-05.txt AC 52 ms 53376 KiB
01-06.txt AC 53 ms 53428 KiB
01-07.txt AC 50 ms 53404 KiB
01-08.txt AC 52 ms 53140 KiB
01-09.txt AC 53 ms 53132 KiB
01-10.txt AC 49 ms 53112 KiB
01-11.txt AC 53 ms 53120 KiB
01-12.txt AC 53 ms 53360 KiB
01-13.txt AC 57 ms 53436 KiB
01-14.txt AC 52 ms 53264 KiB
01-15.txt AC 50 ms 53308 KiB
01-16.txt AC 54 ms 53248 KiB
01-17.txt AC 54 ms 53124 KiB
01-18.txt AC 50 ms 53148 KiB
01-19.txt AC 54 ms 53080 KiB
01-20.txt AC 49 ms 53180 KiB
02-01.txt AC 165 ms 53324 KiB
02-02.txt AC 177 ms 66072 KiB
02-03.txt AC 168 ms 69516 KiB
02-04.txt AC 207 ms 68528 KiB
02-05.txt AC 198 ms 81644 KiB
02-06.txt AC 190 ms 81064 KiB
02-07.txt AC 138 ms 60288 KiB
02-08.txt AC 141 ms 60288 KiB
02-09.txt AC 288 ms 83908 KiB
02-10.txt AC 219 ms 83400 KiB
02-11.txt AC 316 ms 83916 KiB
02-12.txt AC 317 ms 83584 KiB
02-13.txt AC 322 ms 83640 KiB
02-14.txt AC 250 ms 83320 KiB
02-15.txt AC 273 ms 76056 KiB
02-16.txt AC 192 ms 70544 KiB
02-17.txt AC 175 ms 69952 KiB
02-18.txt AC 128 ms 57120 KiB
02-19.txt AC 117 ms 56328 KiB
02-20.txt AC 163 ms 64916 KiB
03-01.txt AC 458 ms 149968 KiB
03-02.txt AC 388 ms 157884 KiB
03-03.txt AC 140 ms 68988 KiB
03-04.txt AC 318 ms 140640 KiB
03-05.txt AC 441 ms 167684 KiB
03-06.txt AC 449 ms 163480 KiB
03-07.txt AC 469 ms 161848 KiB
03-08.txt AC 348 ms 153760 KiB
03-09.txt AC 351 ms 157880 KiB
03-10.txt AC 353 ms 147320 KiB
03-11.txt AC 352 ms 146784 KiB
03-12.txt AC 635 ms 170764 KiB
03-13.txt AC 611 ms 169904 KiB
03-14.txt AC 656 ms 170304 KiB
03-15.txt AC 785 ms 170452 KiB
03-16.txt AC 448 ms 160288 KiB
03-17.txt AC 453 ms 156672 KiB
03-18.txt AC 476 ms 160064 KiB
03-19.txt AC 337 ms 145232 KiB
03-20.txt AC 331 ms 148248 KiB
03-21.txt AC 338 ms 148044 KiB
03-22.txt AC 614 ms 162536 KiB
03-23.txt AC 306 ms 135140 KiB
03-24.txt AC 301 ms 135180 KiB
03-25.txt AC 314 ms 135432 KiB
03-26.txt AC 282 ms 128668 KiB
03-27.txt AC 278 ms 128048 KiB
03-28.txt AC 280 ms 127408 KiB
03-29.txt AC 462 ms 150160 KiB
03-30.txt AC 442 ms 150132 KiB
03-31.txt AC 478 ms 150824 KiB
03-32.txt AC 434 ms 150872 KiB
sample-01.txt AC 44 ms 51560 KiB
sample-02.txt AC 46 ms 51652 KiB
sample-03.txt AC 47 ms 51576 KiB