Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:1.5 s 空间限制:512 MB

#3757. 「ROIR 2018 Day2」大数据处理

Statistics

题目描述

译自 ROI 2018 Regional. Day2 T4. Обработка больших данных

某实验室正在研发一种能处理大规模数据的新型超级计算机。

这台超算的内存包含 $2^k$ 个存储单元,依次编号为 $0\ldots 2^k-1.$ 用内存段 $[L,R]$ 表示编号 $≥L$ 且 $≤R$ 的所有存储单元,该内存段的长度为 $R-L+1.$

定义:如果内存段 $[L,R]$ 的长度是 $2$ 的整数次幂(不妨假设是 $2^i$),且 $L$ 是 $2^i$ 的整数倍,那么这个内存段是「正确的内存段」。

若 $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. 你需要给每个存储单元赋值。简单起见,我们用游程编码的形式给出每个单元上的值。开头的 $c_1$ 个单元中存储的值为 $v_1,$ 接下来 $c_2$ 个单元中存储的的值为 $v_2,$ 以此类推,最后的 $c_n$ 个单元中存储的值为 $c_n,$ $1≤v_i≤m.$

举个例子,如果 $k = 3,$ $n = 3,$ $m = 2,$ $c = {1,$ $2,$ $5},$ $v = {1,$ $2,$ $1},$ 那么内存将被赋值为 $[1,$ $2,$ $2,$ $1,$ $1,$ $1,$ $1,$ $1].$

你只有一种方法给单元赋值:$\mathtt{STORE}([l,r],x).$ 该函数表示将内存段 $[l,r]$ 中所有单元全部赋值为 $x.$ 注意,$[l,r]$ 必须是合法的内存段。

试求至少需要多少次操作才能达成要求。

输入格式

第一行三个整数 $k,n,m$。
接下来的 $n$ 行,每行三个整数 $c_i,v_i$。

输出格式

输出一行一个整数,表示至少的次数。

样例

input

3 3 2
1 1
2 2
5 1

output

3

目标:$[1, 2, 2, 1, 1, 1, 1, 1]$

  • $\mathtt{STORE}([0, 7], 1),$ 得到 $[1, 1, 1, 1, 1, 1, 1, 1];$
  • $\mathtt{STORE}([1, 1], 2),$ 得到 $[1, 2, 1, 1, 1, 1, 1, 1];$
  • $\mathtt{STORE}([2, 2], 2),$ 得到 $[1, 2, 2, 1, 1, 1, 1, 1].$

数据范围与提示

$0 ≤ k ≤ 30,$ $1 ≤ n ≤ 10^5,$ $1 ≤ m ≤ 10^9.$

子任务编号 分值 $k\le $ $k\le$ $m\le$
1 15 $3$ $8$  $8$ 
2  15  $19$ $10$
3 15 $10$
4 10 $50$
5 15 $19$
6 30