100200F Think Positive
题目大意
给你一个数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的更多相关文章
- [LeetCode] First Missing Positive 首个缺失的正数
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- Leetcode First Missing Positive
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- Interleaving Positive and Negative Numbers
Given an array with positive and negative integers. Re-range it to interleaving with positive and ne ...
- 【leetcode】First Missing Positive
First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...
- 【leetcode】First Missing Positive(hard) ☆
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- LeetCode - 41. First Missing Positive
41. First Missing Positive Problem's Link ---------------------------------------------------------- ...
- LeetCode题解-----First Missing Positive
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- hdu 5183. Negative and Positive (哈希表)
Negative and Positive (NP) Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- Java for LeetCode 041 First Missing Positive
Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0] ...
随机推荐
- 条款49:了解new-handle行为
多线程下的内存管理与单线程下是完全不同的,因为heap是一个可以被全局改动的资源,所以所有的线程都有可能去访问这一资源,这回导致很多的race_conditions. 当operator new未 ...
- winform中的状态栏,以及在状态栏目上显示时间
1:在winform上添加状态栏,并且在状态栏目上多添加几个label. step1:拖一个StatusStrip到winform上,名字默认为statusStrip1.找到statusStrip1的 ...
- git 远程库 创建私钥
1.创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开Shell(W ...
- AtCoder Petrozavodsk Contest 001 A - Two Integers
Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement You are given positive ...
- Linux终端录屏与播放 script 命令
本文由Suzzz原创,发布于 http://www.cnblogs.com/Suzzz/p/4107700.html ,转载请保留此声明. 有时候可能想要记录在终端的所有操作包括输出等,将来作为视频播 ...
- HDU1423:Greatest Common Increasing Subsequence
浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:http://acm.hdu.edu.cn/showproblem.php?p ...
- Visualforce入门第二篇_2017.3.1
代码实现类似Html的表单(Form) <apex:page sidebar="false" standardController="Account"&g ...
- Python利用itchat库向好友或者公众号发消息
首先获得好友或者公众号的UserName 1.获取好友UserName #coding=utf8 import itchat itchat.auto_login(hotReload=True) #想给 ...
- HUD2102(基础bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- [转载]python的range()函数用法
使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的slide,最后分析一个好玩儿的冒泡程序. 这里记 ...