首页 > 其他分享 >[JZOJ5396]【NOIP2017提高A组模拟10.6】Blocks

[JZOJ5396]【NOIP2017提高A组模拟10.6】Blocks

时间:2022-12-29 14:34:52浏览次数:47  
标签:NOIP2017 ch Blocks 10.6 int LL t2 t1 include


Description

[JZOJ5396]【NOIP2017提高A组模拟10.6】Blocks_复杂度


[JZOJ5396]【NOIP2017提高A组模拟10.6】Blocks_单调栈_02

Solution

既然随便操作
问题可以转化成求极大的区间,区间平均数大于等于K

可以每个点减掉K求前缀和。
从左向右扫描,应该考虑二分。
但是前缀和并不是单调的。

然而显然可以对于前缀和再做一次前缀取min,正确性显然。

复杂度NMlogN
可能加上某些奇技淫巧优化可以通过。

事实上前缀取min的过程,相当于取单调的过程

对于左端点l1,l2
如果l1<l2且Suml1<Suml2,那么l2是没用的。

对于右端点同理。

那么得到两个单调栈。
左端点的栈按坐标递增,前缀和递减的顺序扫描,右端点的栈按照同样顺序相应的移指针即可。

Code

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define N 1000005
#define LL long long
using namespace std;
int n,m;
LL a[N],s[N],l[N],r[N],t1,t2;
LL read(LL &n)
{
char ch=' ';int q=0,w=1;
for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
if(ch=='-')w=-1,ch=getchar();
for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
int main()
{
freopen("blocks.in","r",stdin);
freopen("blocks.out","w",stdout);
cin>>n>>m;
fo(i,1,n) read(a[i]);
fo(i,1,m)
{
LL x,ans=0;
read(x);
s[0]=0;
fo(j,1,n) s[j]=(LL)a[j]-x+s[j-1];
t1=t2=0;
fo(j,1,n)
{
while(t2&&s[r[t2]]<=s[j]) t2--;
r[++t2]=j;
}
fod(j,n,0)
{
while(t1&&s[l[t1]]>=s[j]) t1--;
l[++t1]=j;
}
int k=t1;
fo(j,1,t2)
{
while(k&&s[r[j]]-s[l[k]]<0) k--;
ans=max(ans,r[j]-l[k]);
}
printf("%lld ",ans);
}
}


标签:NOIP2017,ch,Blocks,10.6,int,LL,t2,t1,include
From: https://blog.51cto.com/u_15925597/5977143

相关文章

  • [JZSC2017]【NOIP2017模拟6.25】总结
    Text今天说是NOIP难度,时间也是标准的3个半小时,放松了一点。早餐CALL个拉布粉,收钱什么的搞了20分钟。一眼看T1就是树形DP,随便弄两下就可以了。T2诶好像怎么放都没有区别,......
  • 【NOIP2017提高A组集训10.28】三元组
    Description有X+Y+Z个三元组(x[i],y[i],z[i]),请你从每个三元组中挑数,并满足以下条件:1、每个三元组中可以且仅可以选择一个数(即x[i],y[i],z[i]中的一个)2、选择x[i]的三元......
  • 【NOIP2017提高A组集训10.28】图
    Description有一个n个点A+B条边的无向连通图,有一变量x,每条边的权值都是一个关于x的简单多项式,其中有A条边的权值是k+x,另外B条边的权值是k-x,如果只保留权值形如k+x的边,那么这......
  • iOS 开发:『Blocks』详尽总结 (二)底层原理
     本文用来介绍iOS开发中『Blocks』的底层原理。我将通过Blocks由OC转变的C++源码来一步步解析Blocks的底层原理。通过本文您将了解到:Blocks的实质是......
  • 「Tutorial」Intro to Blocks
    新瓶新酒,把之前所有遇到的分块的零零散散的内容都总结一下。我也是不是啥数据结构大师,所以这篇Tutorial可能也没有啥深层次的理解。References这篇总结的实在太全了......
  • poj3255 Roadblocks--次短路spfa
    原题链接:​​http://poj.org/problem?id=3255​​题意:n个点,标号为1到n,m条路,u,v,len,表示u与v之间路长为len,求1到n第二短路长,题目保证存在第二短路径。#define_CRT_SECURE_NO_D......
  • CodeBlocks Tried to run compiler executable but failed!
    Q:Triedtoruncompilerexecutablebutfailed!A:下载安装MingGW64下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/atte......
  • 二进制安装mariadb-10.6.11
    二进制安装MariaBD1.源下载#官方源下载不方便这里使用清华源wgethttps://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-10.6.11/bintar-linux-systemd-x86_64/maria......
  • 在虚拟机中如何安装Mac OS X Snow Leopard 10.6
    前一段时间由于心血来潮,也由于在twitter上经常看到tinyfoo等大虾说苹果的优势。自己就先装个MacOS系统学习一下,本人是狂热的小黑迷,原来在bestbuy和老婆在看MacbookPro时,我......
  • ArcMap10.6以上版本添加天地图底图
    文章目录​​申请天地图服务Key​​​​在ArcMap10.7中添加天地图服务​​​​注意点​​申请天地图服务Key天地图​​API​​:​​http://lbs.tianditu.gov.cn/server/MapSe......