Lineup Counting Queries

PDF 视图

提交程序


分数: 100 (部分)
时间限制: 4.0s
内存限制: 256M

作者:
题目类型

题目描述

有一条奶牛队列。初始时(即 \(t=0\))队列中只有编号为 \(0\) 的奶牛,且它位于位置 \(0\)。如果一头奶牛前面有 \(k\) 头奶牛,那么称它位于位置 \(k\)。

对于每个时刻 \(t=1,2,3,\dots\),队列按如下规则变化:

  • 原来位于位置 \(0\) 的奶牛移动到位置 \(\left\lfloor \frac{t}{2} \right\rfloor\)
  • 原来位于位置 \(1 \dots \left\lfloor \frac{t}{2} \right\rfloor\) 的奶牛全部向前移动一格
  • 编号为 \(t\) 的奶牛加入队尾,也就是位置 \(t\)

现在有 \(Q\) 个独立询问,满足 \(1 \le Q \le 10^5\)。每个询问给定五个整数 \(l_1,r_1,l_2,r_2,t\),你需要回答:

  • 在时刻 \(t\) 之后,编号位于区间 \([l_1,r_1]\) 中的奶牛里,有多少头的当前位置落在区间 \([l_2,r_2]\) 中?

数据范围满足:

  • \(0 \le l_1 \le r_1 \le t\)
  • \(0 \le l_2 \le r_2 \le t\)
  • \(t \le 10^{18}\)

输入格式

第一行包含整数 \(Q\)。

接下来 \(Q\) 行,每行五个整数:

\(l_1\ r_1\ l_2\ r_2\ t\)

输出格式

对于每个询问,输出一行一个整数。

样例 1

输入
4
0 9 0 9 9
3 5 4 5 9
4 5 3 5 9
1 1 3 3 9
输出
10
2
1
1
说明

若列出若干时刻结束后的队列,可得:

t = 0 | 0
t = 1 | 0 1
t = 2 | 1 0 2
t = 3 | 0 1 2 3
t = 4 | 1 2 0 3 4
t = 5 | 2 0 1 3 4 5
t = 6 | 0 1 3 2 4 5 6
t = 7 | 1 3 2 0 4 5 6 7
t = 8 | 3 2 0 4 1 5 6 7 8
t = 9 | 2 0 4 1 3 5 6 7 8 9

在 \(t=9\) 时,从前到后依次为 [2,0,4,1,3,5,6,7,8,9]

第三个询问中,位置 \(3 \dots 5\) 上的奶牛是 [1,3,5],其中只有一头编号落在 \([4,5]\) 中,因此答案为 \(1\)。

样例 2

输入
1
0 1000000000000000000 0 1000000000000000000 1000000000000000000
输出
1000000000000000001

数据范围

  • 输入 3:\(Q \le 1000, t \le 100\)
  • 输入 4-7:所有询问都满足 \(l_1 = r_1\)
  • 输入 8-14:所有询问都满足 \(r_1 \le 2l_1\)
  • 输入 15-21:无额外限制

命题信息

原题命题:Agastya Goel、Benjamin Qi


评论

目前没有评论。