cf500E New Year Domino (倍增)
先用线段树处理出推倒某一个后能覆盖到的最右端的位置R(绝对不能是最右边的那个骨牌,因为有可能右面的很短,左面的巨长(R不随L单调),后面算花费又需要用到这个位置),之后可以花费R到第一个比R大的左端点来跳到下一个骨牌
然后可以倍增处理出跳多少次能跳到哪个骨牌,统计答案即可
#include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=2e5+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,M,L[maxn],R[maxn],R1[maxn],nxtp[maxn];
int rma[maxn*],ch[maxn*],nxt[maxn][],dis[maxn][]; inline void update(int p){
rma[p]=max(rma[p<<],rma[p<<|]);
} void change(int p,int l,int r,int x,int y){
if(l==r) rma[p]=y;
else{
int m=l+r>>;
if(x<=m) change(p<<,l,m,x,y);
else change(p<<|,m+,r,x,y);
update(p);
}
}
int query(int p,int l,int r,int x,int y){
if(x<=l&&r<=y)
return rma[p];
else{
int m=l+r>>,re=;
if(x<=m) re=query(p<<,l,m,x,y);
if(y>=m+) re=max(re,query(p<<|,m+,r,x,y));
return re;
}
} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd();
for(i=;i<=N;i++){
L[i]=rd(),R[i]=rd()+L[i];
}
L[N+]=2e9+;
for(i=;i<=N;i++){
nxtp[i]=upper_bound(L+,L+N+,R[i])-L-;
}
for(i=N;i;i--){
R1[i]=max(R[i],query(,,N,i,nxtp[i]));
change(,,N,i,R1[i]);
nxt[i][]=upper_bound(L+,L+N+,R1[i])-L;
if(nxt[i][]<=N){
dis[i][]=L[nxt[i][]]-R1[i];
for(j=;nxt[i][j]&&nxt[nxt[i][j]][j];j++){
nxt[i][j+]=nxt[nxt[i][j]][j];
dis[i][j+]=dis[i][j]+dis[nxt[i][j]][j];
}
}else nxt[i][]=;
}
M=rd();
for(i=;i<=M;i++){
int a=rd(),b=rd(),ans=; for(j=;j>=;j--){
if(nxt[a][j]&&nxt[a][j]<=b)
ans+=dis[a][j],a=nxt[a][j];
}
printf("%d\n",ans);
}
return ;
}
cf500E New Year Domino (倍增)的更多相关文章
- Good Bye 2014 E - New Year Domino 单调栈+倍增
E - New Year Domino 思路:我用倍增写哒,离线可以不用倍增. #include<bits/stdc++.h> #define LL long long #define f ...
- 后缀数组的倍增算法(Prefix Doubling)
后缀数组的倍增算法(Prefix Doubling) 文本内容除特殊注明外,均在知识共享署名-非商业性使用-相同方式共享 3.0协议下提供,附加条款亦可能应用. 最近在自学习BWT算法(Burrows ...
- BPM Domino集成解决方案
一.需求分析 Lotus Notes/Domino是IBM的协同办公平台,在国内有广泛的用户. 但由于推出年头较早.采用文档数据库等特点, 导致其流程集成能力弱.统计分析难.不支持移动办公等问题,很多 ...
- [板子]倍增LCA
倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...
- 【转载】给那些想多学习,多进步的Domino初学者
在这个社区里面,包括QQ技术群里面混了很久了.遇到了很多Domino初学者,也认识了很多致力于Domino这个技术领域的朋友,很开心.很久没有写长篇大论给大家了.我要把一些想法写出来,共大家参考.讨论 ...
- FineReport中Domino数据库连接方法
1. 概述 Domino是文档型数据库而非关系型数据库,连接Domino可以使用JDBC方式或者ODBC方式,使用JDBC方式需要安装Lotus Domino Driver for JDBC并且此方法 ...
- 在线倍增法求LCA专题
1.cojs 186. [USACO Oct08] 牧场旅行 ★★ 输入文件:pwalk.in 输出文件:pwalk.out 简单对比时间限制:1 s 内存限制:128 MB n个被自 ...
- LCA 倍增||树链剖分
方法1:倍增 1498ms #include <iostream> #include <cstdio> #include <algorithm> #include ...
- Codevs 2370 小机房的树 LCA 树上倍增
题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子, ...
随机推荐
- Luogu P4016 负载平衡问题
传说中的网络流24题之一,我刷的第二题菜. 据说这种东西做完了就可以有质的飞越?不过看着这些Luogu评级就有点蒙蔽. 首先我们看一下题目发现这不是均分纸牌的加强板吗,但是那个环的操作极大地限制了我的 ...
- scikit-learn的线性回归模型
来自 http://blog.csdn.net/jasonding1354/article/details/46340729 内容概要 如何使用pandas读入数据 如何使用seaborn进行数据的可 ...
- MemAdmin 轻量级可视化Memcached管理工具
蛮好用的 具体功能看图 开源地址:https://github.com/junstor/memadmin
- springboot 中事件监听模型的一种实现
目录 定义事件本身 定义事件源 定义监听者 一.需要实现 ApplicationListener 二.使用 @EventListener 注解 测试 项目结构 前言: 事件监听模型是一种常用的设计模式 ...
- 大数据之Flume
什么是Flume ApacheFlume是一个分布式的.可靠的.可用的系统,用于高效地收集.聚合和将大量来自不同来源的日志数据移动到一个集中的数据存储区. 系统要求 1. JDK 1.8 或以上版本 ...
- spring cloud服务提供与调用示例
本文创建方式采用intellij IDEA 创建项目 1.创建基于Eureka的注册中心. 在打开项目中右键,选择new 选择moudle 然后下一步 输入要创建的项目的信息 选择web下面的web ...
- 【教你玩转云计算】在阿里云一键安装快速部署Oracle11g
云计算时代提供了更方便可靠的IAAS,PAAS和SAAS平台.将已有或正在研发的项目迁移到云计算平台,和传统的服务器部署还是存在一些异同点. 本文手把手教你在阿里云平台快速的部署Oracle11g ...
- 从源码的角度再看 React JS 中的 setState
在这一篇文章中,我们从源码的角度再次理解下 setState 的更新机制,供深入研究学习之用. 在上一篇手记「深入理解 React JS 中的 setState」中,我们简单地理解了 React 中 ...
- nginx应用总结(1)-- 基础知识和应用配置梳理
在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介Nginx是一个高性能的HTTP和反向代理服务 ...
- 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...