LOJ2611. NOIP2013 积木大赛


LINK


题目大意是给你一个目标状态数组
每次你可以选择一个连续区间加上一个值,求最小操作次数


我是神奇的脑子
最近做数据结构疯了
然后看见这题就数据结构了

好像网上还没有这种做法


逆向考虑这个过程
我们直接从目标数组删去一个连续区间

我们先考虑对于一个区间肯定一次删掉min(l to r)是最优的情况
假设区间最小的位置是pos,那么删除后pos变成了0
所以可以递归成l to pos−1和pos+1 to r两个区间
累加上pos的高度并且区间减这个高度就好了

因为每一次删除会把一个位置变成0,所以最多操作n次,然后时间复杂度是nlogn的


 #include<bits/stdc++.h>
using namespace std;
#define N 100010
#define LD t<<1
#define RD t<<1|1
int n,h[N];
int minv[N<<],pos[N<<],sub[N<<];
void pushup(int t){
if(minv[LD]<=minv[RD]){
minv[t]=minv[LD],pos[t]=pos[LD];
}else{
minv[t]=minv[RD],pos[t]=pos[RD];
}
}
void pushdown(int t){
if(sub[t]){
minv[LD]-=sub[t];sub[LD]+=sub[t];
minv[RD]-=sub[t];sub[RD]+=sub[t];
sub[t]=;
}
}
void build(int t,int l,int r){
if(l>r)return;
if(l==r){minv[t]=h[l];pos[t]=l;return;}
int mid=(l+r)>>;
build(LD,l,mid);
build(RD,mid+,r);
pushup(t);
}
void modify(int t,int l,int r,int L,int R,int vl){
if(l>r)return;
if(L<=l&&r<=R){minv[t]-=vl;sub[t]+=vl;return;}
pushdown(t);
int mid=(l+r)>>;
if(R<=mid)modify(LD,l,mid,L,R,vl);
else if(mid<L)modify(RD,mid+,r,L,R,vl);
else {
modify(LD,l,mid,L,mid,vl);
modify(RD,mid+,r,mid+,R,vl);
}
pushup(t);
}
#define pi pair<int,int>
pi query(int t,int l,int r,int L,int R){
if(l>r)return pi(,);
if(L<=l&&r<=R)return pi(minv[t],pos[t]);
pushdown(t);
int mid=(l+r)>>;
pi ans;
if(mid>=R)ans=query(LD,l,mid,L,R);
else if(mid<L)ans=query(RD,mid+,r,L,R);
else{
pi tl=query(LD,l,mid,L,mid);
pi tr=query(RD,mid+,r,mid+,R);
if(tl.first<=tr.first)ans=tl;
else ans=tr;
}
pushup(t);
return ans;
}
#define LL long long
LL solve(int l,int r){
if(l>r)return ;
pi now=query(,,n,l,r);
modify(,,n,l,r,now.first);
return (LL)now.first+solve(l,now.second-)+solve(now.second+,r);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&h[i]);
build(,,n);
printf("%lld",solve(,n));
return ;
}

LOJ2611. NOIP2013 积木大赛 【线段树】的更多相关文章

  1. cogs 1440. [NOIP2013]积木大赛 贪心水题

    1440. [NOIP2013]积木大赛 ★★   输入文件:BlockNOIP2013.in   输出文件:BlockNOIP2013.out   简单对比时间限制:1 s   内存限制:128 M ...

  2. NOIP2013积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  3. noip2013 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  4. NOIP2013 花匠 DP 线段树优化

    网上一堆题解,我写的是N^2优化的那种,nlogn,O(n)的那种能看懂,但是让我自己在赛场写,肯定没戏了 #include <cstdio> #include <iostream& ...

  5. NOIP2013积木大赛 [贪心]

    大意 自己查去... 说明 这道题正解是贪心,但标程里是有这样一句话的:把序列分成(a1,..ai)(ai+1,...aj)......(ak,...an)多个非递减序列.然后所有段中最大值的和减去除 ...

  6. NOIP 2013 积木大赛

    洛谷 P1969 积木大赛 洛谷传送门 JDOJ 2229: [NOIP2013]积木大赛 D2 T1 JDOJ传送门 题目描述 春春幼儿园举办了一年一度的"积木大赛".今年比赛的 ...

  7. [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路

    [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路 题目大意: 对于长度为\(n(n\le10^5)\)的非负数列\(A\),每次可以选取一个区间\(-1\).问将数列清零至少需要 ...

  8. [NOIP2013] 提高组 洛谷P1969 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  9. noip2013提高组:积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第n块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

随机推荐

  1. Entity Framework 中 Schema是什么

    在使用Entity Framework时,会注意到下面这句: protected override void OnModelCreating(DbModelBuilder modelBuilder) ...

  2. PHP数据库链接类(PDO+Access)

    PHP PDO Access链接 class DbHelpClass { private $conn; private $qxId; private $ret; function __construc ...

  3. GDB操作基本命令

    GDB操作基本命令 1 打开文件及退出操作 shell下输入 gdb filename : 打开单个文件 gdb filename -q: 打开单个文件,屏蔽掉GDB自带的说明信息 gdb下输入qui ...

  4. 欢迎来到 Flask 的世界

    欢迎来到 Flask 的世界 欢迎阅读 Flask 的文档.本文档分成几个部分,我推荐您先读 < 安装 >,然后读< 快速上手 >.< 教程 > 比快速上手文档更详 ...

  5. spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器)

    spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器) 资源绑定视图解析器 + 内部资源(普通模式)视图解析器 并存方式 内部资源视图解析器: http:// ...

  6. Spoj-COINS-记忆化dp

    COINS - Bytelandian gold coins #dynamic-programming In Byteland they have a very strange monetary sy ...

  7. spring注入的四种方式

    配置文件spring.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...

  8. syslinux启动盘制作

    # <font color=DarkCyan >syslinux启动盘制作</font> # ### 准备工具 ### 1. BOOTICEx64 软件 ##分区引导制作工具 ...

  9. MySql设计规范及SQL索引优化【呕心之作】

    数据库及表结构基本设计规范 1. 所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5. ...

  10. laravel中单独获取一个错误信息的方法

    获取单独的错误信息的方法