A:
这题就是求石子最后最大。
直接贪心,让最低石子数尽量为0;
让最开始为0,执行操作。
最后的值加上最低点的值(必须小于零)于0的差值如果大于0就减去。
即可。
B:
题意就是求满足题目中表达式条件 K的最小值。
K=min(ai,aj)/|i-j|
其中每个数对k的限制最大的。 一定是大于这个数且离这个数最远的数。
然后每个数有一个限制,就可以求出K
所以关键是怎么求这个K。
本来我想用线段树搞得,(查询大于1,n这个区间大于i的数,优先查询左子树)
后来队友说有更简单的。
就是从把数组坐标和权值存下,按权值从大到小排序。
这样顺着扫一遍,后面的数一定比前面的数大,只需记录前面的数坐标最小和最大的数即可。
/。。。。。。/
#include <bits/stdc++.h>
const int M = 300000+100;
using namespace std;
struct node
{
int val,id;
}t[M];
int a[M];/*
void build(int l,int r,int rt)
{
if(l==r)
{
st[rt]=0;
return ;
}
int mid=(l+r)>>1;
build(l,mid,rt<<1);
build(mid+1,r,rt<<1|1);
// st[rt]=st[rt<<1]