C 小石的海岛之旅

链接:https://ac.nowcoder.com/acm/contest/949/C
来源:牛客网

暑假到了,小石和小雨到海岛上玩。
从水平方向看海岛可以看成 nnn个小块,每一个小块都有一个高度hih_ihi​,
水位一开始为 000,随着水位的上升,海岛分成了若干块。
现在有 mmm 个询问,求当水位为aia_iai​ 时,海岛会分成多少块。

 

输入描述:

第一行输入两个正整数n,mn,mn,m,分别表示海岛小块个数和询问个数。
第二行输入 nnn 个整数 hih_ihi​,表示每一块的高度。
第三行输入 mmm个整数 aia_iai​,表示每一个询问,保证输入的 aia_iai​ 单调递增。

输出描述:

共 mmm 行,分别对应 mmm 个询问的答案。
示例1

输入

复制

7 3
1 2 3 1 2 1 3
1 2 3

输出

复制

3
2
0

说明

当水位高度为 1 时,岛屿被分成 3 块,2 3;2;3

当水位高度为 2 时,岛屿被分成 2 块:3;3 。

当水位高度为 3 时,岛屿全部被淹没,剩余 0 块 。
思路:只有当左边的高度比水位低,右边的高度比水位高的时候才会被分割
    #include<bits/stdc++.h>
using namespace std;
const int N=1E3+;
int arr[N];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&arr[i]);
}
int y;
for(int j=;j<=m;j++){
scanf("%d",&y);
int x=;
for(int i=;i<=n;i++){
if(arr[i]>y&&arr[i-]<=y){
x++;
}
}
printf("%d\n",x);
}
return ;
}

D 小杨买水果

链接:https://ac.nowcoder.com/acm/contest/949/D
来源:牛客网

水果店里有 nnn个水果排成一列。店长要求顾客只能买一段连续的水果。
小阳对每个水果都有一个喜爱程度 aia_iai​,最终的满意度为他买到的水果的喜欢程度之和。
如果和为正(不管是正多少,只要大于 000 即可),他就满意了。

小阳想知道在他满意的条件下最多能买多少个水果。

你能帮帮他吗?

输入描述:

第一行输入一个正整数 n,表示水果总数。

第二行输入 n 个整数 aia_iai​,表示小阳对每个水果的喜爱程度。

输出描述:

一行一个整数表示结果。(如果 1 个水果都买不了,请输出 0)
示例1

输入

复制

5
0 0 -7 -6 1

输出

复制

1
题解:构造一个前缀和,并对前缀和进行排序,从小到大排序,前缀和相同的,下标大的在前边,我要让起始点参与排序,因为有可能某一个前缀本身就是最优解,(不太理解)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2E6+;
int arr[N];
struct stu{
int a;
int b;
bool friend operator<(const stu &x,const stu &y){
if(x.a!=y.a)return x.a<y.a;
return x.b>y.b;
}
}sum[N];
int main(){
int n;
cin>>n;
sum[].a=;
for(int i=;i<=n;i++){
scanf("%d",&arr[i]);.
sum[i].a=sum[i-].a+arr[i];
sum[i].b=i;
}
sort(sum,sum++n);
int min1=n+;
int ans=;
for(int i=;i<=n;i++){
ans=max(ans,sum[i].b-min1);
min1=min(sum[i].b,min1);
}
cout<<ans<<endl;
return ;
}

第二种解法:二分!!(还是不理解)

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAX = 1e6*+;
ll a[MAX];
ll x,w;
int ans; int main(){
int n;
scanf("%d",&n);
for (int i = ; i <= n;i++){
scanf("%lld",&x);
w+=x;
a[i]=min(a[i-],w); if(w>){//总和大于0,特判
ans=max(ans,i);//不需要减1
continue;
} int l=,r=i;
while(l<=r){//二分找左边最小值
int mid=(l+r)>>;
if(a[mid]<w) r=mid-;
else l=mid+;
}
ans=max(ans,i-r-);//需要减1,自己推一下,不好解释~~(
//大体就是找到右边小于0的那一块,多了一个负值,把多的那个值去掉,右边就是大于0的,
//当然那个负值在右边那一块的最左边) }
printf("%lld\n",ans);
return ;
}

NK16的更多相关文章

  1. 详谈Format String(格式化字符串)漏洞

    格式化字符串漏洞由于目前编译器的默认禁止敏感格式控制符,而且容易通过代码审计中发现,所以此类漏洞极少出现,一直没有笔者本人的引起重视.最近捣鼓pwn题,遇上了不少,决定好好总结了一下. 格式化字符串漏 ...

随机推荐

  1. 【codeforces】Educational Codeforces Round 80 D. Minimax Problem——二分+二进制处理

    题目链接 题目大意 有n个维度为m的向量,取其中两个进行合并,合并时每个维度取两者之间的较大者,得到的新的向量中,维度值最小者最大为多少 分析 首先最需要注意的是m的取值,m最大只有8 那么我们可以二 ...

  2. Contest 141

    2019-06-16 14:35:52 1089. Duplicate Zeros - Easy 问题描述: 问题求解: 很显然的可以使用O(n), O(n)的解法.主要问题在于如何在O(1)空间复杂 ...

  3. 报错:Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'gender' at row 1

    我遇到这个错误是解决办法:我修改了对应的数据库字段的长度:原本我设置的是char型,但是存进去的是一个string型,结果就报了这个报了这个错误 下面就是数据库修改之后的结果. 以上都是我学习过程中遇 ...

  4. 学习mybatis框架时配置xml文件解决select莫名其妙报错问题

    遇到这种情况,如果语法没有错误,那就可能是你的eclipse在耍你!!! 怎么弄呢,重新建立一个文件,把原来的代码复制到新的文件中就ok啦!不用谢我,我叫雷锋

  5. POJ - 1061 青蛙的约会 扩展欧几里得 + (贝祖公式)最小正整数解

    题意: 青蛙 A 和 青蛙 B ,在同一纬度按照相同方向跳跃相同步数,A的起点为X ,每一步距离为m,B的起点为Y,每一步距离为 n,一圈的长度为L,求最小跳跃步数. 思路: 一开始按照追击问题来写, ...

  6. coding++ :JS-判断当前是否是IE浏览器,并返回时IE几?

    IEVersion(); function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var is ...

  7. .NET 5 中的正则引擎性能改进(翻译)

    前言 System.Text.RegularExpressions 命名空间已经在 .NET 中使用了多年,一直追溯到 .NET Framework 1.1.它在 .NET 实施本身的数百个位置中使用 ...

  8. python—json

    一.json数据类型:是字符串 # json通用数据类型,所有语言都可以用 # {k-v}形式存在,里面只能用双引号"" # 定义json字符串,要用'''{}'''格式 #htt ...

  9. vue组件中的style scoped中遇到的问题

    在uve组件中我们我们经常需要给style添加scoped来使得当前样式只作用于当前组件的节点.添加scoped之后,实际上vue在背后做的工作是将当前组件的节点添加一个像data-v-1233这样唯 ...

  10. 【swagger】C# 中 swagger 的使用及避坑

    @ 目录 1 安装 2 修改名称和版本号 3 显示说明 4 显示控制器注释及汉化 5 路由相同,查询参数不同的方法 6 忽略 Model 中的某些字段 7 传递 header 8 出错时的 HTTP ...