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. 快速理解编码,unicode与utf-8

    1.为什么编码,因为cpu只认识数字2.ASCII 一个字符共占7位,用一个字节表示,共128个字符3.那么ASCII浪费了最高位多可惜,出现了ISO-8859-1,一个字节,256个字符,很多协议的 ...

  2. selenium 使用教程详解-java版本

    第一章 Selenium 概述 1.1.Selenium 发展史 ​ Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗 ...

  3. 北邮OJ-257- 最近公共祖先-软件14 java

    思路分析:思路应该比较简单也很容易想的来,就是比较两个节点的最近的祖先节点,要对每个节点依次记录下他的所有祖先节点,包括其自己,因为自己也算自己的祖先节点,这一点题目中没有明确指出 所以比较坑. 我们 ...

  4. eclipse-JEE配置Tomcat并发布第一个项目

    一.配置过程 Window--preferences--Server--Runtime Environment, 然后点击add 我下载的是Tomcat7.0,选择你的版本就行了 选择Tomcat的安 ...

  5. spring 事务源码赏析(二)

    我们在spring 事务源码赏析(一) 中分析了spring事务是如何找到目标方法,并如何将事务的逻辑织入到我们的业务逻辑中.本篇我们将会看到spring事务的核心实现: 1.事务传播机制的实现 2. ...

  6. Matlab——m_map指南(4)——实例

    1. 全球/地区温度图 (1)读取数据 clear all setup_nctoolbox %调用工具包 tic %计时 %% nc=ncgeodataset('tmpsfc.gdas.199401. ...

  7. centos8系统下docker安装jenkins

    前提是已经安装好docker 1.下载jenkins(最新版本) docker pull jenkins/jenkins 2.创建用于存放jenkins的文件夹 mkdir /home/var/jen ...

  8. go语言goroutine

    Go语言goroutine 在别的语言里想要在一个程序中实现多任务,如python,python实现多任务可以使用多进程.多线程.携程.但多进程占用资源,多线程无法发挥多核的优势(GIL),pytho ...

  9. Javascript 获取随机颜色的几种方式

    先认识一下颜色值的表达方式 #FFFFFF,由6位16进制数组成.#FFFFFFFF,由8位16进制数组成,前6位表示颜色,后两位数表示透明度,数值越大,透明度越小.rgb(255,255,255), ...

  10. python的int float if...else

    # 字符串 string  单引号 ‘ ’  双引号 “  ”-包含的 app = 'dongt woory' 外面单引号里面可以双引号,外面双引号,里面也可以单引号 app ='你是真的“好看”吗' ...