每块多米诺骨牌所在的位置设为x,每块多米诺骨牌高度为h。如果将x位置上的多米诺骨牌向右翻到,它就可以影响[x+1, x+h-1]范围内的所有多米诺骨牌,让他们也翻到,同时这些被翻到的多米诺骨牌还能影响到其他多米诺骨牌,现在BSNY给出n块多米诺骨牌的位置和高度,问如果向右翻到第i块多米诺骨牌,会有多少多米诺骨牌翻到。

按左端点排序,然后线性扫描。其实二分也可以,但答案有部分的重叠,即单调性。

 var x,h,d,c,ans:array[..]of longint;
n,i,k,last:longint; procedure swap(var x,y:longint);
var t:longint;
begin
t:=x; x:=y; y:=t;
end; procedure qsort(l,r:longint);
var i,j,mid:longint;
begin
i:=l; j:=r; mid:=x[(l+r)>>];
repeat
while mid>x[i] do inc(i);
while mid<x[j] do dec(j);
if i<=j then
begin
swap(x[i],x[j]);
swap(h[i],h[j]);
swap(c[i],c[j]);
swap(d[i],d[j]);
inc(i); dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end; begin readln(n);
for i:= to n do
begin
readln(x[i],h[i]);
d[i]:=x[i]+h[i]-;
c[i]:=i;
end;
qsort(,n);
ans[c[n]]:=;
for i:=n- downto do
begin
last:=d[i];
k:=i+;
ans[c[i]]:=;
while true do
begin
if k>n then break;
if x[k]<=last then ans[c[i]]:=ans[c[i]]+ans[c[k]]
else break;
k:=k+ans[c[k]];
end;
end;
for i:= to n- do write(ans[i],' ');
writeln(ans[n]); end.

最新文章

  1. Linux虚拟机突然网络不能用了但是主机能ping㣈
  2. springMVC 学习(一)
  3. 类:String,Math,DateTime,Random
  4. ArcGIS JS 学习笔记1 用ArcGIS JS 实现仿百度地图的距离量测和面积量测
  5. JavaScript基础整理(1)
  6. 浅谈AJAX的基本原理和原生AJAX的基础用法
  7. IT公司100题-35- 求一个矩阵中最大的二维矩阵(元素和最大)
  8. Oracle外键不加索引会引起死锁问题
  9. graph-tool文档(一)- 快速开始使用Graph-tool - 2.属性映射、图的IO和Price网络
  10. class 文件与dex文件区别 (dvm与jvm区别)及Android DVM介绍
  11. 转:java 类名 this 的使用
  12. Linux下批量改动名字方法
  13. [Swust OJ 217]--Factor(数论,类素数表)
  14. 简单ESB的服务架构
  15. Android异步任务
  16. Spring-MVC4 + JPA2 + MySql-5.5 + SLF4J + JBoss WildFly-8.1开发环境的搭建
  17. 一个在浏览器端将html 转为pdf 的js 插件 jsPDF
  18. hdu_3068_最长回文(Manacher)
  19. 纯JS写动态分页样式效果
  20. hadoop streaming 中跑python程序,自定义模块的导入

热门文章

  1. JQuery EasyUI学习记录(五)
  2. C++实现Singleton模式(effective c++ 04)
  3. NOIP2016 toy
  4. SpringBoot引入监听器
  5. 安装cfssl证书生成工具
  6. cols
  7. destoon 信息发布表单提交验证
  8. ise与win8兼容解决方案
  9. 【php】expose_php 作用
  10. Python基础(三)—— print()格式化输出变量