跪求pascal编程题目,真的不懂怎么做啊,求大神们帮帮我好吗?

题目描述:在一条道路上住有M户人家,街道上安装了N个监听器,每个监听器都能监听到它左边和右边之间的通话。告诉你每个监听器安装的位置,以及监听到的通话次数,问最少一共发生多... 题目描述:
在一条道路上住有M户人家,街道上安装了N个监听器,每个监听器都能监听到它左边和右边之间的通话。告诉你每个监听器安装的位置,以及监听到的通话次数,问最少一共发生多少次通话。
输入第一行包含两个整数N(1<=N<=100,000)和M(N<M<=10^9),分别表示监听器的个数以及住户数量。
接下来N行,每行包含2个整数:Pi(1<=Pi<M)和Ci(1<=Ci<=10^9),表示监听器的位置在住户Pi和住户Pi+1之间,Ci表示监听到的通话次数,输入保证监听器的Pi从小到大给出。
输出

输出一个整数,表示通话的最少可能次数。
样例输入
3 4
1 1
2 2
3 1

样例输出
2
样例解释:一种可能的方案是:1和4、2和3之间各有一次通话,共2次。

输入样例
3 9
3 4
7 2
8 3
输出样例
5
一种可能的方案是:3和4、3和7、3和8、3和9、8和9之间各通话1次,共5次。
展开
 我来答
taobingxue
2015-03-28 · TA获得超过2.3万个赞
知道大有可为答主
回答量:1148
采纳率:80%
帮助的人:884万
展开全部

维护当前最多还可以有多少电话从前面打到后面。

只要p单调,其实p好像是没有用的。

注意答案可能超过longint如果c是10^9,0,10^9,0....

var
n,m :longint;
i :longint;
last,p,c :longint;
ans :int64;
begin
readln(n, m);
ans:=0;
last:=0;
for i:=1 to n do
begin
readln(p, c);
if (c > last) then ans:=ans+c-last;
last:=c;
end;
writeln(ans);
end.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式