模拟赛 yjqa
考场上怕是石乐志。
状态设计还是很自然的,求什么设什么。
f[i]表示前i个人安排好,电梯最早回到0层的时间
转移的话,枚举上一次最后一个带走的是谁
f[i]=min(max(f[j],t[i])+2*max(ak,j<k<=i))
线段树优化
后面的区间最大值,可以用单调栈记录,弹栈的时候,在线段树上区间赋值
t,f都是单调不降的,所以可以边找答案边二分,一半用t[i]和ak更新。一半用f[j]和ak更新。
记录区间最小ak,最小f[j]+aj,最小f[j],最大f[j](便于二分)
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define mid ((l+r)>>1)
#define numb (ch^'0')
#define ls (x<<1)
#define rs (x<<1|1)
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
int n;
struct node{
ll mi,fmi,vmi,fmx;
ll ch;
node(){
ch=-;
}
}t[*N];
int tim[N],a[N];
int b[N];
int sta[*N],top;
ll f[N];
void pushup(int x){
t[x].mi=min(t[x<<].mi,t[x<<|].mi);
t[x].fmi=min(t[x<<].fmi,t[x<<|].fmi);
t[x].vmi=min(t[x<<].vmi,t[x<<|].vmi);
t[x].fmx=max(t[ls].fmx,t[rs].fmx);
}
void pushdown(int x){
if(t[x].ch==-) return;
t[ls].ch=t[x].ch;
t[ls].vmi=t[x].ch;
t[ls].mi=t[ls].fmi+*t[ls].vmi; t[rs].ch=t[x].ch;
t[rs].vmi=t[x].ch;
t[rs].mi=t[rs].fmi+*t[rs].vmi;
t[x].ch=-;
}
void upda(int x,int l,int r,int to,ll ak,ll c){
if(l==r){
t[x].fmi=c;
t[x].fmx=c;
t[x].vmi=ak;
t[x].mi=t[x].fmi+*t[x].vmi;
return;
}
pushdown(x);
if(to<=mid) upda(x<<,l,mid,to,ak,c);
else upda(x<<|,mid+,r,to,ak,c);
pushup(x);
}
void chan(int x,int l,int r,int L,int R,ll c){
if(L<=l&&r<=R){
t[x].ch=c;
t[x].vmi=t[x].ch;
t[x].mi=t[x].fmi+*t[x].vmi;
return;
}
pushdown(x);
if(L<=mid) chan(x<<,l,mid,L,R,c);
if(mid<R) chan(x<<|,mid+,r,L,R,c);
pushup(x);
}
ll query(int x,int l,int r,int L,int R,ll c){
if(L<=l&&r<=R){
pushdown(x);
if(t[x].fmi<t[x].fmx&&t[x].fmi<=c&&c<=t[x].fmx){
return min(query(x<<,l,mid,L,R,c),query(x<<|,mid+,r,L,R,c));
}
if(t[x].fmx<=c){
return c+*t[x].vmi;
}
if(t[x].fmi>=c){
return t[x].mi;
}
}
pushdown(x);
ll ret=0x3f3f3f3f3f3f3f3f;
if(L<=mid) ret=min(ret,query(x<<,l,mid,L,R,c));
if(mid<R) ret=min(ret,query(x<<|,mid+,r,L,R,c));
return ret;
}
int main(){
rd(n);
for(reg i=;i<=n+;++i){
rd(tim[i]),rd(a[i]);
}
for(reg i=;i<=n;++i){
b[i]=a[i+];
}
sta[++top]=;
upda(,,n,,b[],);
for(reg i=;i<=n+;++i){
//cout<<" ii "<<i<<endl; f[i]=query(,,n,,i-,tim[i]);
//cout<<" f[i] "<<f[i]<<endl;
if(i!=n+)
{
upda(,,n,i,b[i],f[i]);
while(top&&b[sta[top]]<b[i]){
//cout<<sta[top]<<endl;
chan(,,n,sta[top-]+,sta[top],b[i]);
--top;
}
sta[++top]=i;
}
}
printf("%lld",f[n+]);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2018/12/24 21:59:28
*/
模拟赛 yjqa的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
- PKUSC 模拟赛 day1 下午总结
下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...
- [GRYZ]寒假模拟赛
写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...
- BZOJ2741: 【FOTILE模拟赛】L
2741: [FOTILE模拟赛]L Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1170 Solved: 303[Submit][Status] ...
随机推荐
- Python特别low的一个文字游戏
闲来无事 ,调侃舍友的游戏 import os class Role(): def __init__(self,name,sex,fighting): self.name=name self.sex= ...
- 【Markdown】Markdown的使用(自用)
# 欢迎使用 Cmd Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们为记录 ...
- JavaSE基础复习---1---2018/9/27
2018/9/27 JavaSE学习笔记-1 目录: Java的起源 Java语言概述 1.Java的起源 现代编程语言的发展,大致可以理解为,机器码语言---汇编语言---C语言---C++语言-- ...
- IO复用——epoll系列系统调用
1.内核事件表 epoll是Linux特有的I/O复用函数.epoll把用户关心的文件描述上的事件放在内核里的一个事件表中,并用一个额外的文件描述符来标识该内核事件表.这个额外文件描述符使用函数epo ...
- windows程序内部运行机制
Windows程序内部运行机制 2007-10-21 19:52 1010人阅读 评论(0) 收藏 举报 windowsvc++applicationcallbackwinapistructure W ...
- 笔记-flask-原理及请求处理流程
笔记-flask-原理及请求处理流程 1. 服务器声明及运行 最基本的flask项目代码如下 from flask import Flask app = Flask(__name__) @a ...
- 机器学习之-sklearn
https://www.cnblogs.com/lianyingteng/p/7811126.html sklearn官方文档: http://scikit-learn.org/stable/
- Java日志(二):log4j与XML配置文件
[Java日志(一):log4j与.properties配置文件]一文列举的几个案例以.properties文件作为log4j的配置文件,本文简单看一下log4j与XML配置文件 (1)XML配置文件 ...
- 「日常训练」Alena And The Heater (CFR466D2D)
题意(Codeforces 940D) 根据给定要求构建数列,求能构建出相同数列的l和r. 分析 这题写的是真的烦.一定要想到对b串要按照5个5个的看!为什么5个5个的看?因为根据题意,是先看前4个再 ...
- Jenkins - 持续集成部署
1. 安装svn:用于checkout源码 (1)yum 安装:yum -y install subversion (2)查看svn版本信息:svnserver --version 2. 安装jdk ...