【CERC2015】【BZOJ4432】Greenhouse Growth

CERC2017 I: Intrinsic Interval 线段树 CERC2017I 题目是求最小的好区间 好区间就是一段区间都是连续的数 对于好区间显然有个数据结构叫析和树是可以求解的 但是我们用线段树怎么处理呢 首先我们知道 好区间 l 到 r是满足区间maxx-区间minn = r - l 然后我们又知道 两个好区间的交 一定也是好区间 反证法:假如这个交不是好区间 差几个数 那么这几个数如果在左边 那么和右边的数就不能构成好区间 所以两个好区间的交也一定... 阅读详情

Description

你从计算机科学转向农业,你的新工作包括在一个地下温室种植向日葵。在温室中有n个排列在一条直线的向日葵植株,从左向右编号为1到n。有A、B2个照射器为向日葵的生长提供光和热,且照射器A、B分别放置在向日葵的左右两端。
每天只有1个照射器被打开,使所有向日葵转向光源,并使部分向日葵生长。向日葵会生长当且仅当其朝向的相邻植株比它更高,其每天的生长高度为1厘米。请注意,一个植株的生长将使其背后的植株立刻开始生长。
样例数据前三天的生长情况

你将被给出向日葵的初始高度和接下来m天的光照计划,请计算所有向日葵最终的高度。
Input

第一行有2个整n和m(1<= n, m <=300 000)——植株数和天数。
接下来一行包括n个整数h1, h2,… , hn (1 <= hk <=109)——从左到右向日葵的初始高度。
接下来一行包括一个仅含字母A/B长度为m的字符串——从第一天开始的光照计划。
Output

n个整数——从左到右每株向日葵最终的高度
Sample Input

6 5

4 3 5 3 6 6

BABAA

Sample Output

5 5 6 6 6 6
HINT

Source

一开始觉得是线段树,实际上链表模拟一下就行了..
搞标记记录一下A亮的时候长不长,B亮的时候长不长,一个位置长不长,长多少都是可以用当前时间和之前时间来计算的
1表示A亮时候长,2表示B亮时候长,3表示两种都长

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#define MAXN 300010
#define GET (ch>='0'&&ch<='9')
#define Abs(x) (x>=0?x:-x)
using namespace std;
inline void in(int &x)
{
    char ch=getchar();x=0;
    while (!GET)    ch=getchar();
    while (GET) x=x*10+ch-'0',ch=getchar();
}
int Tim,n,m,top,tp;
int cnt[MAXN][4];
struct edge;
struct seg;
vector<edge*> now[MAXN][4];
struct edge
{
    seg *pre,*nxt;
    inline void solve();
    inline void merge();
}List[MAXN<<1];
struct seg
{
    int l,r,flag,h0,t0;
    edge *pre,*nxt;
    inline int calc()   {   return h0+cnt[Tim][flag]-cnt[t0][flag]; }
    inline bool checka()    {   return pre&&pre->pre->calc()>calc();   }
    inline bool checkb()    {   return nxt&&nxt->nxt->calc()>calc();   }
    inline void update()    {   flag=checka()|(checkb()<<1);  }
}*first,*last,list[MAXN<<1];
inline void edge::solve()
{
    int delta=abs(pre->calc()-nxt->calc()),flag=pre->flag^nxt->flag;
    if (delta&&flag&&cnt[Tim][flag]+delta<=300000)   now[cnt[Tim][flag]+delta][flag].push_back(this);
}
inline void edge::merge()
{
    if (!(pre&&nxt))    return;
    int h=pre->calc();
    if (nxt->calc()!=h)  return;
    seg* ret=pre;
    ret->l=pre->l;ret->r=nxt->r;ret->h0=h;ret->t0=Tim;
    ret->pre=pre->pre;ret->nxt=nxt->nxt;ret->update();
    if (ret->pre)    ret->pre->nxt=ret;
    if (ret->nxt)    ret->nxt->pre=ret;
    if (ret->pre)    ret->pre->solve();
    if (ret->nxt)    ret->nxt->solve();
    pre=NULL;nxt=NULL;
}
int main()
{
    in(n);in(m);int h;char ch=' ';
    for (int i=1;i<=n;i++)
    {
        in(h);
        if (last&&last->h0==h)   {   last->r=i;continue;  }
        ++top;list[top].l=i;list[top].r=i;list[top].h0=h;list[top].t0=0;
        if (last)
            ++tp,List[tp].pre=last,List[tp].nxt=&list[top],
            last->nxt=&List[tp],list[top].pre=&List[tp],last->update();
        else    first=&list[top];
        last=&list[top];
    }
    last->update();
    for (seg *i=first;i->nxt;i=i->nxt->nxt)    i->nxt->solve();
    while (ch!='A'&&ch!='B')    ch=getchar();
    for (Tim=1;Tim<=m;Tim++)
    {
        cnt[Tim][1]=cnt[Tim-1][1]+(ch=='A');cnt[Tim][2]=cnt[Tim-1][2]+(ch=='B');
        cnt[Tim][3]=cnt[Tim-1][3]+1;
        for (int f=1;f<=3;f++)
        {
            int it=now[cnt[Tim][f]][f].size();
            for (int i=0;i<it;i++)   now[cnt[Tim][f]][f][i]->merge();
        }
        if (Tim==m)
        {
            for (seg* i=first;i;i=i->nxt?i->nxt->nxt:NULL)
                for (int j=i->l;j<=i->r;++j)
                {
                    if (j>1) putchar(' ');
                    printf("%d",i->calc());
                }
            putchar('\n');
        }
        ch=getchar();
    }
}
cow-confinement:CERC2015解决的问题 牛圈养 2015年中欧区域竞赛的“母牛禁闭”问题解决方案 立即下载

相关推荐

Node框架之NestJS入门学习

文章主要分为三部分:1 NestJS 与Egg对比2 NestJS 基础知识介绍3 使用NestJS快速搭建应用,实现CURD操作e-link文档Egg官网NestJS 官网NestJS中文文档(非官方)

十九万里的博客 4742

[Cerc2007]robotic sort

题目传送门 权限题就不放题目描述了 思路 for循环从11到nn,先输出ii的大小,然后反转ii到ii的大小这一段。 注意要离散化。 代码 #include #include const int maxn=100000; struct data { int v,id; }; data a[maxn+10]; int n; struct splay_tree {

Canopus 3827

山东大学软件工程应用与实践——GMSSL开源库(六)——SM9密钥交换协议

2021SC@SDUSC 文章目录基本概念符号及辅助算法SM9密钥交换协议 基本概念 1976年,Diffie和Hellman在其题为《密码学的新方向》的论文中首次给出了公钥密码学的定义,并提出了Diffie-Hellman密钥交换算法。该算法解决了对称密码体制中的密钥分发问题,使得通信双方可以通过公开信道安全地交换共享密钥。 使用SM9通信的双方通过对方的标识和自身的私钥,经过两次或者可选的三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。该密钥可以作为对称密码算法的会话密钥,其中可选步骤用来实

m0_51588039的博客 1988

BZOJ 1552: [Cerc2007]robotic sort

1552: [Cerc2007]robotic sortTime Limit: 5 Sec Memory Limit: 64 MB Description Input输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000。 第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号。 Output输出共一行,N个用空格隔开的正整数P1,P2,P3…Pn,Pi表示第i

苦鬼·。 789

告别玄学调参:手把手教你用20元件模型搞定GaN HEMT高频仿真(附S参数提取避坑指南)

本文详细介绍了如何使用20元件模型优化GaN HEMT高频仿真,解决传统16元件模型在10GHz以上频段的误差问题。通过S参数提取避坑指南和实战案例,帮助工程师精准建模分布式电极效应和寄生反馈路径,提升射频电路设计效率。

weixin_42523693的博客 442

MacBook上玩转国民技术N32G430:从零搭建ARM开发环境(VSCode + pyOCD)

本文详细介绍了在MacBook上搭建国民技术N32G430的ARM开发环境,涵盖VSCode配置、pyOCD调试及一键编译烧录全流程。通过Homebrew安装工具链、配置Python环境及VSCode插件,开发者可在MacOS高效开发嵌入式应用,特别适合国产芯片N32G430的开发者参考。

weixin_30614109的博客 436

BZOJ1552: [Cerc2007]robotic sort

1552: [Cerc2007]robotic sort Time Limit: 5 SecMemory Limit: 64 MBSubmit: 1428Solved: 563[Submit][Status][Discuss] Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000...

weixin_30617695的博客 167

使用WSL2安装ubuntu系统并配置深度学习环境

wsl2安装ubuntu部署深度学习环境的方法

u013358093的博客 2702

BZOJ4432 : [Cerc2015]Greenhouse Growth

对于高度相同的一段可以合并,用链表从左往右维护这些连续段,每段维护以下信息: $l,r$:表示区间的左右端点。 $t,a$:表示在第$t$天结束时它的高度是$a$。 $b$:当阳光在左边时它是否会长高。 $c$:当阳光在右边时它是否会长高。 令$sa[i],sb[i]$分别表示前$i$天中阳光在左/右边的天数,那么显然第$i$天这一段的高度为$a+b(sa[i]-sa[t])+c(sb[...

weixin_33726318的博客 269

调试备忘录-SWD协议解析

目录--点击可快速直达 文章目录写在前面1  SWD协议简介2  SWD物理层协议解析2.1  SWD通信时序分析2.2  SWD 寄存器简介2.2.1  DP寄存器2.2.2  AP寄存器2.3  SWD通信流程2.3.1  SWD复位2.3.2  SWD读IDCODE2.3.3  SWD清除错误标志位,并且使能AP调试2.3.4  SWD读取AP IDR(也就是AP寄存器的ID CODE)2.3.5  SWD读写MCU任意寄存器 写在前面 最近由于公司需要,所以就做了个基于SWD协议的离线烧写器。由于.

洛神殇的博客 1万+

最优化方法与数学建模

在本篇博客中,我们将探讨最优化方法在数学建模中的应用。首先,我们将介绍几种常见的最优化方法,如梯度下降、牛顿法和遗传算法。接着,我们将详细阐述这些方法的原理和算法。最后,我们将通过一个数学建模案例,展示如何使用Matlab实现这些方法。本文旨在为大家提供一个清晰的思路,以便更好地理解和应用最优化方法。

YOLO 439

[链表 杂题] BZOJ 4432 [Cerc2015]Greenhouse Growth

只有我觉得神题吗 比C难度还大? 看懂了也不会写 不会告诉你我是看着标程写的#include<cstdio> #include<cstdlib> #include<algorithm> #include<vector> #define pb push_back using namespace std;inline char nc(){ static char buf[10000

雯舞 994

远程声控系统(MATLAB代码见优快云资源)

远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基

业精于勤,荒于嬉 5735

[杂题] Codeforces 627F 8VC Venture Cup 2016 - Final Round F. Island Puzzle

题目大意 有一棵n+1个点树 在上面玩n数码 问是否有解 最小步数 否则问加一条边是否有解 最小步数这个好像WC的T1啊? 根据当时考场上玩出来的经验 一棵树直接跑整条路径就好了 环套树是先移动到环上,然后绕着环走若干圈,最后再走向目的地。我们先当做树跑一通 然后看一下所有不在自己的目标位置的宝石是否可以添一条边组成一个环。如果不能组成,答案就是-1 怎么看 所有不在自己的目标位置

雯舞 985

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[CERC2017]Intrinsic Interval

题意 给出一个n排列,m次询问,每次查询长度最小的区间,使得这个区间排序后出现连续的整数(即相邻的差为1),并且包含(或等于)区间[l,r]。若长度相等,取l端点最小的。 n,m<=1E5 思考 重要的性质: 1.一个区间是连续的,当且仅当其存在r-l个无序二元组(x,y),满足|x-y|=1。 2.若两个连续区间有交,其交必然是连续的。因为交的部分要同时满足左右部分是...

weixin_30279751的博客 259

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

P4747 [CERC2017]Intrinsic Interval

P4747 [CERC2017]Intrinsic Interval 前言 这道题有高大上的析合树做法 不过我不会,可能退役后会考虑学学吧。 这题还有线段树优化建边缩点的好办法。 我还是不会,可能以后会学学吧。 题目大意 \(ProblemLink\) 其实题目里面讲的很清楚了。 简单的说就是给你一个\(1\) ~\(n\)的排列 定义如果一个区间\([l,r]\)是好区间,仅当\(l\...

weixin_30323631的博客 212

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【CERC2007】机器排序

P2438 - 【CERC2007】机器排序 Description 在布拉格捷克理工大学(Czech Technical University)某个幽深的角落,有一些实验室用来检测各种材料的机械和电气性能。在昨天的一项展示中,你已经见识了其中的一间是如何变成全新的多 媒体实验室的。但那里仍然有别的实验室,服务于它们最初的用途。 在这个任务中,你将要给这样的一...

weixin_30800987的博客 263

「CERC2017」Embedding Enumeration-DP

Description 给定一个 nnn 个点的树。你需要将它放到一个 2×n2 \times n2×n 的网格里,每个格子至多放一个点,在树上相邻的点在网格中也必须相邻,并且 111 号点必须放在左上角。 求方案数对 109+710^9+7109+7 取模的结果。 n≤105n \leq 10^5n≤105 Solution 设fuf_ufu​表示把uuu放在左上角的方案数。 uuu是叶子。显...

DSL_HN_2002的博客 694

题解:CERC2015 ASCII Addition

庆祝通过noip2018初赛,系列五题EP5. 题目描述: 题意翻译 题目背景 现在,如果你只是用手机的相机对着它们,智能手机应用可以即时翻译文本,甚至解决数学问题。您的工作是实现一个更简单的功能,回忆过去——添加两个作为ASCII艺术的整数。 题目描述 ASCII艺术是一个字符矩阵,正好是7行高,每个字符都是点或小写字母X。 给出了A +B形式的表达式,其中A和B都是正整...

akqcmz2661的博客 496

1552: [Cerc2007]robotic sort

1552: [Cerc2007]robotic sort Time Limit:5 SecMemory Limit:64 MBSubmit:1205Solved:459 Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000。 第二行为N个用空格隔开的正整数,表示N个物品最初排...

weixin_30614109的博客 95

[CERC2015] Cow Confinement(扫描线)

首先,我们关注到矩阵的右边界是在一列的最右边,所以优先级最高,花的优先级显然在牛的前面。因为图中有矩形,再加上牛能遍历到的地方其实是一个一个矩形面积的并,所以我们考虑做扫描线,竖着建一颗线段树,维护每一列的信息,因为牛只能往右往下走,所以我们从右从下进行扫描。还记不记得我们在扫到矩阵右边界的时候,需要处理一些值,这些值需要找到下面第一个矩阵边界,但是因为我们在上一列的时候把下面矩形的两条边界在。所以正确的做法是,我们应该把矩阵的左边界当做前一列的格子最右边的线,而优先级应是:矩阵右边界。

mamingzhi_2026的博客 169

[杂题] BZOJ 4437 [Cerc2015]Looping Labyrinth

三种情况分别对应 bfs提前结束 (n,0)(n,0)且(0,m)(0,m)都可达 存在(kn,km)(kn,km)可达 这题TM卡常啊#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typedef pair<int,int> abcd; typedef long long ll;inline c

雯舞 829

hdu 4432 Sum of divisors

...

禅境花园 412

【bzoj 4451】[Cerc2015]Frightful Formula - 递推

才没有在做cerc2015呢   看到好像不少人这题写fft卡得死死的啊,不如O(n)O(n) 递推(雾)   首先可以观察出(i,1)(i,1)这个格子为xx时对(n,n)(n,n) a,ba,b单独的贡献为x(n−2+n−in−i)an−1bn−ix\binom{n-2+n-i}{n-i}a^{n-1}b^{n-i},(1,i)(1,i)格子同理。这两部分可以直接xjb算出来。   考虑(

GEOTCBRL 1768

【CERC2015】【BZOJ4434】Ice Igloos

Description一个坐落在北极冰冻湖面上的渔村因全球变暖而面临危险——湖面开始破碎。村庄内有n座球形冰屋,每座冰屋在湖面上占据了一块圆形区域。 一座冰屋可以视为平面座标系中的一个圆:其圆心座标为整数,其半径为小于1的一位浮点数。给出冰面断裂的座标,这些村民希望知道每次断裂会有多少个冰屋受到影响。 形式上,给出q个询问,每个询问包括一条由两个端点确定的线段,查询每条线段贯穿的冰屋数。如果线段

CreationAugust is 14 years old forever 1322
上一篇: 【SDOI2015】【BZOJ4086】旅行计划travel
下一篇: 【CERC2015】【BZOJ4434】Ice Igloos
CreationAugust
博客等级 码龄12年 262粉丝 449原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值