题目描述
译自 ROI 2018 Regional. Day2 T4. Обработка больших данных
某实验室正在研发一种能处理大规模数据的新型超级计算机。
这台超算的内存包含 2k 个存储单元,依次编号为 0…2k−1. 用内存段 [L,R] 表示编号 ≥L 且 ≤R 的所有存储单元,该内存段的长度为 R−L+1.
定义:如果内存段 [L,R] 的长度是 2 的整数次幂(不妨假设是 2i),且 L 是 2i 的整数倍,那么这个内存段是「正确的内存段」。
若 k=3, 则正确的内存段为 [0,7], [0,3], [4,7], [0,1], [2,3], [4,5], [6,7], [0,0], [1,1], [2,2], [3,3], [4,4], [5,5], [6,6] 和 [7,7].
现在,每个存储单元所存储的值均为 0. 你需要给每个存储单元赋值。简单起见,我们用游程编码的形式给出每个单元上的值。开头的 c1 个单元中存储的值为 v1, 接下来 c2 个单元中存储的的值为 v2, 以此类推,最后的 cn 个单元中存储的值为 cn, 1≤vi≤m.
举个例子,如果 k=3, n=3, m=2, c={1, 2, 5}, v={1, 2, 1}, 那么内存将被赋值为 [1, 2, 2, 1, 1, 1, 1, 1].
你只有一种方法给单元赋值:STORE([l,r],x). 该函数表示将内存段 [l,r] 中所有单元全部赋值为 x. 注意,[l,r] 必须是合法的内存段。
试求至少需要多少次操作才能达成要求。
输入格式
第一行三个整数 k,n,m。
接下来的 n 行,每行两个整数 ci,vi。
输出格式
输出一行一个整数,表示至少的次数。
3 3 2
1 1
2 2
5 1
3
提示
样例解释
目标:[1,2,2,1,1,1,1,1]
- STORE([0,7],1), 得到 [1,1,1,1,1,1,1,1];
- STORE([1,1],2), 得到 [1,2,1,1,1,1,1,1];
- STORE([2,2],2), 得到 [1,2,2,1,1,1,1,1].
数据范围
0≤k≤30, 1≤n≤105, 1≤m≤109.
子任务编号 |
分值 |
k≤ |
k≤ |
m≤ |
1 |
15 |
3 |
8 |
8 |
2 |
15 |
19 |
|
10 |
3 |
15 |
|
4 |
10 |
50 |
5 |
15 |
19 |
|
6 |
30 |
|