QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#442180 | #8524. Weather Forecast | ucup-team3699# | WA | 1ms | 6112kb | C++23 | 1.3kb | 2024-06-15 09:50:03 | 2024-06-15 09:50:06 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define F first
#define S second
const int mol=1e9+7;
int a[200005];
int bit[200005];
int n, k;
void upd(int now, int val){
while(now<=n){
bit[now]=max(bit[now], val), now+=now&-now;
}
}
int va1l(int now){
int ans=-1;
while(now) ans=max(ans, bit[now]), now-=now&-now;
return ans;
}
int pre[200005];
const double eps=1e-9;
bool ok(double val){
vector<double>ch;
for(int i=1;i<=n;i++) ch.pb(-val*i+pre[i]);
sort(ch.begin(), ch.end());
int ans;
for(int i=1;i<=n;i++) bit[i]=-1;
for(int i=1;i<=n;i++){
int q=0;
if(pre[i]>=val*i||abs(pre[i]-val*i)<=eps) q=1;
int id=lower_bound(ch.begin(), ch.end(), -val*i+pre[i])-ch.begin()+1;
q=max(q, va1l(id)+1);
upd(id, q);
if(i==n) ans=q;
}
return ans>=k;
}
void solve(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i], pre[i]=pre[i-1]+a[i];
double l=1, r=1000;
for(int i=1;i<=50;i++){
double mid=(l+r)/2;
if(ok(mid)) l=mid;
else r=mid;
}
cout<<fixed<<setprecision(10)<<l<<"\n";
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
// int t;
// cin>>t;
// while(t--)
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 6112kb
input:
7 3 1 3 1 2 2 2 1
output:
1.6666666667
result:
ok found '1.66667', expected '1.66667', error '0.00000'
Test #2:
score: 0
Accepted
time: 1ms
memory: 5924kb
input:
1 1 1
output:
1.0000000010
result:
ok found '1.00000', expected '1.00000', error '0.00000'
Test #3:
score: 0
Accepted
time: 1ms
memory: 5864kb
input:
2 1 2 1
output:
1.5000000005
result:
ok found '1.50000', expected '1.50000', error '0.00000'
Test #4:
score: -100
Wrong Answer
time: 1ms
memory: 5884kb
input:
3 2 2 4 4
output:
4.0000000000
result:
wrong answer 1st numbers differ - expected: '3.00000', found: '4.00000', error = '1.00000'