luogu#P11554. [ROIR 2016] 假期旅行 (Day 1)

[ROIR 2016] 假期旅行 (Day 1)

题目背景

翻译自 ROIR 2016 D1T4

题目描述

某地铁路是一条直线,沿线有 nn 个车站。我们称从某个车站到下一个车站之间的路段为一个区段。

一列火车从车站 11 开始,最终到达车站 nn,在每个车站都会停靠。火车上有 kk 个座位,座位编号从 11kk。每张火车票上由三个数字 s,t,as, t, a,表示持有这张票的乘客允许从车站 ss 到车站 tt,坐在编号为 aa 的座位上。

暑假的一天,Vasya 计划乘坐火车从一个车站到另一个车站。他发现当天已经售出了 mm 张票,并且可能在他感兴趣的车站之间已经没有空座位。直接从某个车站到另一个车站的票只能在每个区段的对应座位都空闲时购买。

Vasya 想到,有时即便如此,他仍然可以通过购买几张票,在某些中途车站换座位再继续乘坐。因此,他希望购买最少的票数,让他在每个区段都有座位。

Vasya 还没有完全确定下来要从哪个车站出发,也没有决定最终到达哪个车站。他记录了 qq 个出行方案,对于每个方案,他想知道如果选择这个方案,最少需要购买多少张票才能完成这次旅行。

输入格式

第一行输入三个整数 n,m,kn,m,k2n2000002 \leq n \leq 2000000m2000000 \leq m \leq 2000001k2000001 \leq k \leq 200000),分别表示车站的数量、已经售出的票的数量,以及火车上的座位数。

接下来 mm 行,每行输入三个整数 si,ti,ais_i,t_i,a_i,表示一张已售出的票的起始车站 sis_i,目的车站 tit_i 和座位号 aia_i1si<tin1 \leq s_i < t_i \leq n1aik1 \leq a_i \leq k)。保证在任意区段,每个座位最多只被一张票占用。

接下来一行输入一个整数 qq,表示查询的数量(1q2000001 \leq q \leq 200000)。

接下来 qq 行,每行输入两个整数 fj,djf_j,d_j1fj<djn1 \leq f_j < d_j \leq n),分别表示 Vasya 想要出发的车站和目的地车站。

输出格式

输出共 qq 行。对于每个查询,输出 Vasya 完成这次旅行所需的最少票数。如果无法完成旅行,输出 -1

5 4 3
1 4 1
2 5 3
2 3 2
4 5 2
3
1 5
3 5
4 5
-1
2
1

提示

样例解释

  • 在车站 22 到车站 33 的区段,所有座位都已经被占用,因此从车站 11 到车站 55 的旅程无法进行。
  • 从车站 33 到车站 55,需要购买两张票:从车站 33 到车站 44 坐座位 22,从车站 44 到车站 55 坐座位 11
  • 从车站 44 到车站 55 只需要一张座位 11 的票。

数据范围

子任务 是否捆绑 分值 n,m,kn,m,k\le qq\le
11 3333 100100 11
22 3030 200000200000
33 3737 200000200000