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. Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端

    Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端 本文同步更新地址: https://dotnet9.com/11520.html https:// ...

  2. office的高级应用

    Word高级应用:设置斜线表头(一根:边框:多根:插入形状,按住鼠标拖动). 注意:1.用好样式功能 2.大量重复工作懂得批量处理 3.反复要做的固定操作固化成“模板”“套路” 4.碰到异常情况,知道 ...

  3. SuperMap许可常见问题及解决办法

    一.试用许可申请可以直接在北京超图软件股份有限公司官网的“SuperMap 技术资源中心”申请试用许可,申请后您将获得:1.如果申请的是 SuperMap GIS 7C 系列产品的许可,您将获得 一个 ...

  4. 解决pycharm不能导入bs4模块问题

    问题描述: 在导入bs4模块时有报错提示 “ Traceback (most recent call last): File "E:/project/code/py-pengfu/py-pf ...

  5. iOS 项目发布

    一.Apple开发者账号 1.1 开发者账号类型 个人级 公司级 企业级 公司和企业的可多人协作. 在苹果的开发者平台登录后,可在 People 界面邀请其他人员协作开发,邀请的人需要注册一个 app ...

  6. Sublime Text 2 Install Package Debug

    本文转载自CSDN空间freshlover的博客<Sublime Text 无法使用Package Control或插件安装失败的解决方法>,转载请注明出处,谢谢! Sublime Tex ...

  7. AutoCompleteTextView的简单使用

    1.AutoCompleteTextView功能 自动完成文本框,由EditText派生而来,是一个文本编辑框,相较普通的文本编辑框多了提示功能,即用户输入一定数量的字符后,自动完成文本框会弹出一个下 ...

  8. [WPF]为什么使用SaveFileDialog创建文件需要删除权限?

    1. 问题 好像很少人会遇到这种需求.假设有一个文件夹,用户有几乎所有权限,但没有删除的权限,如下图所示: 这时候使用SaveFileDialog在这个文件夹里创建文件居然会报如下错误: 这哪里是网络 ...

  9. idea打包或编译错误,错误为c盘idea路径某些文件被占用(非idea文件,项目生成的文件)

    方法列表(2的效果可能更好) 1.将被占用的文件删除之后,重新打包或编译. 2.多编译几次项目. 3.发现真正可能的原因.(貌似被南航企业版360拦截了,导致targe或maven等文件被占用问题) ...

  10. HIT软件构造课程3.4总结(Object-Oriented Programming )

    上一节学习了ADT理论,这一节学习ADT的具体实现:OOP 1.基本概念:对象,类,属性,方法 对象 对象是状态和行为的捆绑.java中,状态=成员变量,行为=方法. 类 每个对象都定义了一个类,类定 ...