답안 #442096

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
442096 2021-07-07T06:46:34 Z Evirir Feast (NOI19_feast) C++17
30 / 100
140 ms 14424 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

#define watch(x) cout<<(#x)<<"="<<(x)<<'\n'
#define mset(d,val) memset(d,val,sizeof(d))
#define setp(x) cout<<fixed<<setprecision(x)
#define forn(i,a,b) for(int i=(a);i<(b);i++)
#define fore(i,a,b) for(int i=(a);i<=(b);i++)
#define pb push_back
#define F first
#define S second
#define pqueue priority_queue
#define fbo find_by_order
#define ook order_of_key
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<ll> vi;
typedef vector<ii> vii;
typedef long double ld;
template<typename T>
using pbds = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void amin(ll &a, ll b){ a=min(a,b); }
void amax(ll &a, ll b){ a=max(a,b); }
void YES(){cout<<"YES\n";} void NO(){cout<<"NO\n";}
void SD(int t=0){ cout<<"PASSED "<<t<<endl; }
const ll INF = ll(1e18);
const int MOD = 998244353;

const bool DEBUG = 0;
const int MAXN = 300005;

int n,K;
ll a[MAXN];
ll p[MAXN];
ll dp[MAXN], cnt[MAXN];
ii pre[MAXN]; //best dp[j-1]+sum(j..i) for j<=i

ll sum(int l, int r){ return p[r]-(l?p[l-1]:0LL); }

int main()
{
	ios_base::sync_with_stdio(0); cin.tie(0);
	
	cin>>n>>K;
	fore(i,1,n)
	{
		cin>>a[i];
		p[i]=p[i-1]+a[i];
	}
	dp[0]=0;
	cnt[0]=0;
	pre[0]={-INF,0};
	
	ll ans=0;
	for(ll L=0,R=1e16;L<=R;)
	{
		ll mid=(L+R)>>1;
		
		fore(i,1,n)
		{
			ii tmp=pre[i-1];
			tmp.F+=a[i];
			pre[i]=max(tmp, {(i>1?dp[i-1]:0LL)+a[i]-mid, cnt[i-1]+1});
			if(pre[i].F>=dp[i-1])
			{
				dp[i]=pre[i].F;
				cnt[i]=pre[i].S;
			}
			else
			{
				dp[i]=dp[i-1];
				cnt[i]=cnt[i-1];
			}
		}
		if(cnt[n]>=K)
		{
			ans=dp[n]+min((ll)K,cnt[n])*mid;
			L=mid+1;
		}
		else R=mid-1;
		
		if(0)
		{
			cout<<"mid="<<mid<<'\n';
			cout<<"a: "; fore(i,1,n) cout<<a[i]<<" "; cout<<'\n';
			cout<<"dp: "; fore(i,1,n) cout<<dp[i]<<" "; cout<<'\n';
			cout<<"cnt: "; fore(i,1,n) cout<<cnt[i]<<" "; cout<<'\n';
			cout<<"pre: "; fore(i,1,n) cout<<"("<<pre[i].F<<","<<pre[i].S<<") "; cout<<'\n';
			cout<<"ans: "<<dp[n]+cnt[n]*mid<<"\n\n";
		}
	}
	
	cout<<ans<<'\n';
	
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 100 ms 13984 KB Output is correct
2 Correct 102 ms 14140 KB Output is correct
3 Correct 104 ms 14308 KB Output is correct
4 Correct 107 ms 14284 KB Output is correct
5 Correct 109 ms 14180 KB Output is correct
6 Correct 101 ms 14084 KB Output is correct
7 Correct 101 ms 13892 KB Output is correct
8 Correct 99 ms 14188 KB Output is correct
9 Correct 99 ms 13880 KB Output is correct
10 Correct 105 ms 14168 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 92 ms 14048 KB Output is correct
2 Correct 93 ms 14364 KB Output is correct
3 Correct 90 ms 14020 KB Output is correct
4 Correct 101 ms 14180 KB Output is correct
5 Correct 132 ms 13964 KB Output is correct
6 Correct 90 ms 13948 KB Output is correct
7 Correct 95 ms 14312 KB Output is correct
8 Correct 104 ms 14424 KB Output is correct
9 Correct 102 ms 13900 KB Output is correct
10 Correct 102 ms 14360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 122 ms 14148 KB Output is correct
2 Correct 133 ms 14020 KB Output is correct
3 Correct 140 ms 14100 KB Output is correct
4 Correct 124 ms 14020 KB Output is correct
5 Correct 124 ms 14148 KB Output is correct
6 Correct 124 ms 14244 KB Output is correct
7 Correct 127 ms 14280 KB Output is correct
8 Correct 122 ms 14148 KB Output is correct
9 Correct 123 ms 14380 KB Output is correct
10 Correct 129 ms 14252 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Incorrect 1 ms 332 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Incorrect 1 ms 332 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Incorrect 1 ms 332 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 100 ms 13984 KB Output is correct
2 Correct 102 ms 14140 KB Output is correct
3 Correct 104 ms 14308 KB Output is correct
4 Correct 107 ms 14284 KB Output is correct
5 Correct 109 ms 14180 KB Output is correct
6 Correct 101 ms 14084 KB Output is correct
7 Correct 101 ms 13892 KB Output is correct
8 Correct 99 ms 14188 KB Output is correct
9 Correct 99 ms 13880 KB Output is correct
10 Correct 105 ms 14168 KB Output is correct
11 Correct 92 ms 14048 KB Output is correct
12 Correct 93 ms 14364 KB Output is correct
13 Correct 90 ms 14020 KB Output is correct
14 Correct 101 ms 14180 KB Output is correct
15 Correct 132 ms 13964 KB Output is correct
16 Correct 90 ms 13948 KB Output is correct
17 Correct 95 ms 14312 KB Output is correct
18 Correct 104 ms 14424 KB Output is correct
19 Correct 102 ms 13900 KB Output is correct
20 Correct 102 ms 14360 KB Output is correct
21 Correct 122 ms 14148 KB Output is correct
22 Correct 133 ms 14020 KB Output is correct
23 Correct 140 ms 14100 KB Output is correct
24 Correct 124 ms 14020 KB Output is correct
25 Correct 124 ms 14148 KB Output is correct
26 Correct 124 ms 14244 KB Output is correct
27 Correct 127 ms 14280 KB Output is correct
28 Correct 122 ms 14148 KB Output is correct
29 Correct 123 ms 14380 KB Output is correct
30 Correct 129 ms 14252 KB Output is correct
31 Correct 1 ms 332 KB Output is correct
32 Incorrect 1 ms 332 KB Output isn't correct
33 Halted 0 ms 0 KB -