大数据处理
题号:NC53327
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

译自 ROI 2018 Regional. Day2 T4. Обработка больших данных
某实验室正在研发一种能处理大规模数据的新型超级计算机。
这台超算的内存包含个存储单元,依次编号为用内存段[L,R]表示编号≥L且≤R的所有存储单元,该内存段的长度为R-L+1.
定义:如果内存段[L,R]的长度是2的整数次幂(不妨假设是),且L是的整数倍,那么这个内存段是「正确的内存段」。
若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,
举个例子,如果k=3,n=3,m=2,c= {1,2,5 },v= {1,2,1 },那么内存将被赋值为[1,2,2,1,1,1,1,1].
你只有一种方法给单元赋值:该函数表示将内存段[l,r]中所有单元全部赋值为x.注意,[l,r]必须是合法的内存段。
试求至少需要多少次操作才能达成要求。

输入描述:

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

输出描述:

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

输入

复制
3 3 2
1 1
2 2
5 1

输出

复制
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,

CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/3029