【思维】 Discrete Function
题意
给定横坐标为\(1~N\),函数值为\(a_{i}\)的\(n\)个函数的值,求出连线斜率最大,且二者之间所有点都在其下面的两点坐标
数据范围
\(2\leq N\leq 10^{5}\)
\(-2^{32}\leq a_{i} \leq 2^{32}\)
题解
满足两点间如果不能有其他点,斜率会下降,所以斜率最大的只会产生在相邻的两点
Code
#include<bits/stdc++.h>
using namespace std;
#define close ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
#define fi first
#define se second
#define ll long long
#define pb push_back
typedef pair<long long,long long> pll;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef double db;
const ll mod=1e9+7;
const db pi=acos(-1.0); // 圆周率
const int INF = 0x3f3f3f3f;
const int N=1e5+10;
ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;}
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
int n;
db a[N];
int main()
{
close
cin>>n;
int x,y;
db rec =INT_MIN;
rep(i,1,n+1) cin>>a[i];
rep(i,2,n+1)
{
db tmp=fabs(a[i]-a[i-1]);
if(tmp > rec)
{
rec=tmp;
x=i-1;y=i;
}
}
cout<<x<<' '<<y<<endl;
}

浙公网安备 33010602011771号