传送门

题目大意

给你一个数n和长度为n的序列,序列中的每个数均为1或-1,如果一个点j对于任意的k都满足题目中给的式子,则j是一个合法位置,问这样的j有多少个

分析

这道题有两种方法,分别对应代码1和代码2。

方法1

我们发现最终答案实际就是这n个数的和与0去最大值,因为我们不难发现对于任意两个相邻的1和-1它们的存在是没有意义的,因为这两个位置肯定不合法,而它们的和为0,对其它位置没有影响。所以在得到这些后我们只需把相邻的1和-1不断删掉就行了,因此可以证明之前的猜想。

方法2

我们发现对于每个j对应的最坏情况的k只有图1和图2两种情况,所以只要这两种情况满足且j的后缀大于0这个j就是合法的。

图1图2

这里的maxsur和minpre都是对于k的取值范围内的min或max,这就不由让我们想起了单调队列。我们根据sur和pre各建一个单调队列,然后用数组记录某个点是否两种情况均满足就可以了,注意在计算时的顺序问题,详见代码。

代码1

#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("positive.in","r",stdin);
freopen("positive.out","w",stdout);
int n,i,ans=;
cin>>n;
for(i=;i<=n;i++){
int x;
cin>>x;
ans+=x;
}
if(ans>=)cout<<ans<<endl;
else cout<<<<endl;
return ;
}

代码2

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int pre[],sur[],qp[],qs[],lp,rp,ls,rs,a[];
int p1[],p2[],is[];
inline void init(){
memset(pre,,sizeof(pre));
memset(sur,,sizeof(sur));
memset(qp,,sizeof(qp));
memset(qs,,sizeof(qs));
memset(is,,sizeof(is));
lp=ls=;
rp=rs=;
}
int main(){
freopen("positive.in","r",stdin);
freopen("positive.out","w",stdout);
int n,i,ans=;
init();
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%d",&a[i]);
pre[i]=pre[i-]+a[i];
}
for(i=n;i>;i--)sur[i]=sur[i+]+a[i];
for(i=n;i>;i--){
while(pre[i]<qp[rp]&&rp>){
rp--;
}
qp[++rp]=pre[i];
p1[rp]=i;
}
for(i=;i<=n;i++){
while(sur[i]>qs[rs]&&rs>){
rs--;
}
qs[++rs]=sur[i];
p2[rs]=i;
}
for(i=;i<=n;i++){
while(p2[ls]<=i&&ls<=rs)ls++;
if(ls>rs){
if(sur[i]>)is[i]++;
continue;
}
if(sur[i]-qs[ls]>)is[i]++;
}
for(i=n;i>;i--){
while(p1[lp]>=i&&lp<=rp)lp++;
if(lp>rp){
if(sur[i]>)is[i]++;
continue;
}
if(sur[i]+qp[lp]>)is[i]++;
}
for(i=;i<=n;i++)
if(sur[i]>&&is[i]==)
ans++;
cout<<ans<<endl;
return ;
}

100200F Think Positive的更多相关文章

  1. [LeetCode] First Missing Positive 首个缺失的正数

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  2. Leetcode First Missing Positive

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  3. Interleaving Positive and Negative Numbers

    Given an array with positive and negative integers. Re-range it to interleaving with positive and ne ...

  4. 【leetcode】First Missing Positive

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...

  5. 【leetcode】First Missing Positive(hard) ☆

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  6. LeetCode - 41. First Missing Positive

    41. First Missing Positive Problem's Link ---------------------------------------------------------- ...

  7. LeetCode题解-----First Missing Positive

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  8. hdu 5183. Negative and Positive (哈希表)

    Negative and Positive (NP) Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  9. Java for LeetCode 041 First Missing Positive

    Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0] ...

随机推荐

  1. 剑指offer--16.数组中重复的数字

    时间限制:1秒 空间限制:32768K 热度指数:198342 本题知识点: 数组 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复 ...

  2. spring学习-2

    Spring_属性配置细节 1.若字面值包含特殊字符,可以使用<[CDATA[]]>把字面值包裹起来 例:<value><![CDATA[<3333>^]]& ...

  3. javascript网页复制功能-复制到粘贴板-兼容多数浏览器(不使用flash)

    使用方法:clipBordCopy("hello Copy");//执行后复制hello Copy到粘贴板 通过 var result = clipBordCopy("h ...

  4. 如何加快Json 序列化?有哪些方法?

    1.使用阿里的fastjson 2.可以通过去除不必要属性加快序列化.如person对象,有id,name,address,我json需要用户姓名,此时序列化的时候就只序列化name,id和addre ...

  5. java实现sendemail

    <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</arti ...

  6. BZOJ2096:[POI2010]Pilots

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...

  7. dockerfile mysql

    FROM centos6.6-mysql5.5:0.0.4 MAINTAINER syberos:wangmo RUN mv /etc/my.cnf /etc/my.cnf.bak ADD my.cn ...

  8. FMDB是iOS平台的SQLite数据库框架

    1.FMDB简介 什么是FMDBFMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 为什么使用FMDB使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...

  9. 创建github怎样管理

    创建版本库 第一步: 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录 $mkdir learngit $cd learngit $pwd mkdir learngit 创建一个名叫“ ...

  10. Cypress USB3014 controlEndPoint 使用事项

    control endpoint 发送,接收数据 返回fasle , lastError = 997, 抓包查看 Control Transfer (UP) XXXXXXXXX 1. Device: ...