天体赛垫底 自我要好好反省了 很落魄 很难过
之前一直很懒 算法学会就算过了 但其实这完全不够
debug也不debug 很多该学的也没理解进去 下次还这样肯定要被踢了 他不踢我也走了 这样纯属自我感动欺骗自我
做题喜欢看题解只会让我越来越垃圾 c+V只会让我在赛场上被干爆 着急
正文
发一篇线段树版的题解【洛谷官方题解无】,核心思想一样
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+15;
double a[N];
double pre[N];
int n;
int s,t;
struct node
{
int l,r;
double mx;
}e[N*100];
void build(int k,int l,int r){
e[k].l=l,e[k].r=r;
if(l==r){
e[k].mx=pre[l];
return;
}
int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
e[k].mx=max(e[k<<1].mx,e[k<<1|1].mx);
}
double ask(int k,int x,int y){
if(e[k].l>=x&&e[k].r<=y){
return e[k].mx;
}
double ans=-1e100;
int mid=(e[k].l+e[k].r)>>1;
if(x<=mid)ans=max(ask(k<<1,x,y),ans);
if(mid<y)ans=max(ask(k<<1|1,x,y),ans);
return ans;
}
bool check(double mid){
for(int i=1;i<=n;i++)pre[i]=pre[i-1]+a[i]-mid;
build(1,1,n);
for(int i=1;i<=n-s+1;i++){
int k=min(n,i+t-1);
if(ask(1,i+s-1,k)-pre[i-1]>=0){
//cout<<ask(1,1,n)<<endl;
//for(int i=1;i<=n;i++)cout<<pre[i]<<" ";
//cout<<endl;
return true;
}
}
return false;
}
int main(){
//ios::sync_with_stdio(false);cin.tie(0);
cin>>n>>s>>t;
for(int i=1;i<=n;i++)cin>>a[i];
double l=-1e5,r=1e5;double mid;
while(r-l>1e-6){
double mid=(l+r)/2;
//cout<<l<<" "<<r<<" "<<mid<<endl;
if(check(mid))
l=mid;
else
r=mid;
}
cout<<fixed<<setprecision(3)<<l<<endl;
}
加油吧 少年 失败一次不可怕 打差一次不可怕 ;可怕的是自我欺骗 自我麻痹 始终在泥潭里翻滚却不愿起身
时间真的很紧迫 希望还有一个月的时间 加油