题目传送门(内部题98)


输入格式

  第一行一个整数$n$,第二行$n$个整数$a_1\sim a_n$,第三行$n$个整数$b_1\sim b_n$。


输出格式

  一行一个整数表示$\max(r-l+1)$。保证至少有一个区间满足条件。


样例

样例输入:

5
2 -4 1 2 -2
-2 3 1 -3 1

样例输出:

1


数据范围与提示

  对于$20\%$的数据,$n\leqslant 5,000$。
  对于$60\%$的数据,$n\leqslant 10^5$。
  对于$100\%$的数据,$1\leqslant n\leqslant 5\times 10^5,|ai|,|bi|\leqslant 10^9$。
  数据有一定梯度。


题解

又没有打正解。

先来看一个性质,设$s$为一个序列的前缀和,那么如果$i<j$且$s[j]\geqslant s[i]$,那么这一段的加和大于$0$。

于是我们可以二分枚举长度,然后用$b$的前缀和数组为下标构建树状数组维护$a$的前缀和数组的最小值即可。

时间复杂度:$\Theta(n\log^2 n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
unordered_map<long long,int>mp;
int n;
int a[500001],b[500001],tr[1000001],cnt;
long long sa[500001],sb[500001],sta[1000001];
int ans;
int lowbit(int x){return x&-x;}
void add(int x,int w){for(int i=x;i<=sta[0];i+=lowbit(i))tr[i]=min(tr[i],w);}
int ask(int x){int res=0x3f3f3f3f;for(int i=x;i;i-=lowbit(i))res=min(res,tr[i]);return res;}
bool judge(int x)
{
memset(tr,0x3f,sizeof(tr));
for(int i=x;i<=n;i++)
{
add(sb[i-x],sa[i-x]);
if(ask(sb[i])<=sa[i])return 1;
}
return 0;
}
int main()
{
scanf("%d",&n);sta[++sta[0]]=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sa[i]=sa[i-1]+a[i];
sta[++sta[0]]=sa[i];
}
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
sb[i]=sb[i-1]+b[i];
sta[++sta[0]]=sb[i];
}
sort(sta+1,sta+sta[0]+1);
for(int i=1;i<=sta[0];i++)if(sta[i]!=sta[i-1])mp[sta[i]]=++cnt;
for(int i=0;i<=n;i++){sa[i]=mp[sa[i]];sb[i]=mp[sb[i]];}
int lft=1,rht=n,res=1;
while(lft<=rht)
{
int mid=(lft+rht)>>1;
if(judge(mid)){res=mid;lft=mid+1;}
else rht=mid-1;
}
printf("%d",res);
return 0;
}

rp++

最新文章

  1. 在发送ajax请求时加时间戳或者随机数去除js缓存
  2. Mockito Hello World
  3. 写了cookie阻止通过输入地址直接访问下一个html,但是直接输入地址访问时,会闪一下下一个页面,怎么回事啊????、
  4. Windows Phone 8 下载文件进度
  5. java执行顺序
  6. Spring AOP报错处理 Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误
  7. dns服务
  8. 利用二维矩阵求spanning tree
  9. virtualbox虚拟机中mysql远程连接登陆报2003错误的解决方法
  10. MyEclipse高效开发之必备快捷键技能
  11. html meta标签用法详细介绍
  12. php in_array比较原理和类型比较问题
  13. Codeforces 478D Red-Green Towers
  14. HDU 2671 Can&#39;t be easier
  15. Loj #3096. 「SNOI2019」数论
  16. 初学Java的那段日子
  17. windows上安装gcc/g++环境(MinGW,msys64等)
  18. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Assignment(Optimization Methods)
  19. android studio 自定义控件
  20. 基于androidstudio3.0的build文件配置问题

热门文章

  1. 用winform实现一个B/S代码更新打包工具
  2. 【原创】大叔经验分享(72)mysql时区
  3. 如何将webstrom本地的代码上传到github上
  4. vue-过滤器-时间戳转换
  5. css,使两个在同一行内的display:inline-block的div顶部对齐。
  6. webpack整合 .vue 文件,集成 vue-loader
  7. 第二卷 第一章 伪IOC容器--羊墅
  8. SQL 语句 连接
  9. 开源框架相关面试问题-butterknife注解框架面试问题讲解
  10. Summer training #8