Submission #903291

# Submission time Handle Problem Language Result Execution time Memory
903291 2024-01-11T06:53:41 Z Faisal_Saqib Holiday (IOI14_holiday) C++17
47 / 100
453 ms 3916 KB
#pragma once
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define ll long long
const int N=1e6+200;
int MN=3003;
int seg_cnt[N];
long long seg_sum[N];
void Update(int i,ll val=-1,int v=1,int s=0,int e=MN)
{
	if(i<s or e<i)
		return;
	if(s==e)
	{
		seg_cnt[v]++;
		if(val==-1)
			seg_sum[v]+=i;
		else
		{
			seg_sum[v]+=val;
		}
		return;
	}
	int mid=(s+e)/2;
	Update(i,val,2*v,s,mid);
	Update(i,val,2*v+1,1+mid,e);
	seg_cnt[v]=seg_cnt[2*v]+seg_cnt[2*v+1];
	seg_sum[v]=seg_sum[2*v]+seg_sum[2*v+1];
}
void Update1(int i,ll val=-1,int v=1,int s=0,int e=MN)
{
	if(i<s or e<i)
		return;
	if(s==e)
	{
		seg_cnt[v]--;
		if(val==-1)
			seg_sum[v]-=i;
		else
			seg_sum[v]-=val;
		return;
	}
	int mid=(s+e)/2;
	Update1(i,val,2*v,s,mid);
	Update1(i,val,2*v+1,1+mid,e);
	seg_cnt[v]=seg_cnt[2*v]+seg_cnt[2*v+1];
	seg_sum[v]=seg_sum[2*v]+seg_sum[2*v+1];
}
int get_cnt(int l,int r,int v=1,int s=0,int e=MN)
{
	if(r<s or e<l)
		return 0;
	if(l<=s and e<=r)
		return seg_cnt[v];
	int mid=(s+e)/2;
	return get_cnt(l,r,2*v,s,mid)+get_cnt(l,r,2*v+1,mid+1,e);
}
long long get_sum(int l,int r,int v=1,int s=0,int e=MN)
{
	if(r<s or e<l)
		return 0;
	if(l<=s and e<=r)
		return seg_sum[v];
	int mid=(s+e)/2;
	return get_sum(l,r,2*v,s,mid)+get_sum(l,r,2*v+1,mid+1,e);
}
int MGL;
int heavy(int tmp,int pre=0,int v=1,int s=0,int e=MN)
{
	if(s==e)
		return s;
	int mid=(s+e)/2;
	if((pre+seg_cnt[2*v+1]+tmp)>MGL)
	{
		return heavy(tmp,pre,2*v+1,mid+1,e);
	}
	else
	{
		return heavy(tmp,pre+seg_cnt[2*v+1],2*v,s,mid);
	}
}
long long findMaxAttraction(int n, int cc, int d, int a[])
{
	MGL=d;
	vector<int> op,dp;
	for(int i=0;i<n;i++)
		op.push_back(a[i]);
	sort(begin(op),end(op));
	op.resize(unique(begin(op),end(op))-begin(op));
	for(int i=0;i<n;i++)
		dp.push_back(lower_bound(begin(op),end(op),a[i])-begin(op));
	long long ans=0;
	for(int left=cc;left>=0;left--)
	{
		Update(dp[left],a[left]);
		{
			int right=cc;
			ll tmie=min(right-cc,cc-left)+right-left;
			if(tmie<=d)
			{
				long long cur;
				if((get_cnt(0,MN)+tmie)<=d)
				{
					cur=get_sum(0,MN);
				}
				else
				{
					int s=heavy(tmie);
					cur=get_sum(s+1,MN);
					if(s!=-1)
						cur+=(op[s]*(d-tmie-get_cnt(s+1,MN)));
				}
				ans=max(ans,cur);
			}
		}
		for(int right=cc+1;right<n;right++)
		{
			Update(dp[right],a[right]);
			ll tmie=min(right-cc,cc-left)+right-left;
			if(tmie>d)
				continue;
			long long cur;
			if((get_cnt(0,MN)+tmie)<=d)
			{
				cur=get_sum(0,MN);
			}
			else
			{
				int s=heavy(tmie);
				cur=get_sum(s+1,MN);
				if(s!=-1)
					cur+=(op[s]*(d-tmie-get_cnt(s+1,MN)));
			}
			ans=max(ans,cur);
		}
		for(int right=cc+1;right<n;right++)
			Update1(dp[right],a[right]);
	}
	return ans;
}

Compilation message

holiday.cpp:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 1 ms 2648 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
4 Correct 1 ms 2652 KB Output is correct
5 Correct 1 ms 2652 KB Output is correct
6 Correct 1 ms 2652 KB Output is correct
7 Correct 1 ms 2868 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 3844 KB Output is correct
2 Correct 21 ms 3840 KB Output is correct
3 Correct 20 ms 3832 KB Output is correct
4 Correct 21 ms 3652 KB Output is correct
5 Correct 32 ms 3656 KB Output is correct
6 Correct 9 ms 3148 KB Output is correct
7 Correct 19 ms 3620 KB Output is correct
8 Correct 27 ms 3548 KB Output is correct
9 Correct 9 ms 3176 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2920 KB Output is correct
2 Correct 1 ms 2920 KB Output is correct
3 Correct 2 ms 2920 KB Output is correct
4 Correct 453 ms 2972 KB Output is correct
5 Correct 314 ms 2972 KB Output is correct
6 Correct 11 ms 2936 KB Output is correct
7 Correct 44 ms 3116 KB Output is correct
8 Correct 73 ms 2912 KB Output is correct
9 Correct 50 ms 2884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 3916 KB Output is correct
2 Incorrect 16 ms 3640 KB Output isn't correct
3 Halted 0 ms 0 KB -