Submission #903270

# Submission time Handle Problem Language Result Execution time Memory
903270 2024-01-11T06:41:11 Z Faisal_Saqib Holiday (IOI14_holiday) C++17
30 / 100
1236 ms 2772 KB
#pragma once
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define ll long long
const int N=30000;
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);
}
long long findMaxAttraction(int n, int cc, int d, int a[])
{
	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)
			{
				int s=-1;
				int e=MN+1;
				while(s+1<e)
				{
					int mid=(s+e)/2;
					if((get_cnt(mid,MN)+tmie)>d)
					{
						s=mid;
					}
					else
					{
						e=mid;
					}
				}
				long long cur=get_sum(s+1,MN);
				if(s!=-1)
				{
					cur+=(a[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;
			int s=-1;
			int e=MN+1;
			while(s+1<e)
			{
				int mid=(s+e)/2;
				if((get_cnt(mid,MN)+tmie)>d)
				{
					s=mid;
				}
				else
				{
					e=mid;
				}
			}
			long long 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 856 KB Output is correct
2 Correct 1 ms 856 KB Output is correct
3 Correct 1 ms 860 KB Output is correct
4 Correct 1 ms 860 KB Output is correct
5 Correct 1 ms 864 KB Output is correct
6 Correct 1 ms 868 KB Output is correct
7 Correct 1 ms 864 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 82 ms 2004 KB Output is correct
2 Correct 75 ms 2004 KB Output is correct
3 Correct 93 ms 2000 KB Output is correct
4 Correct 94 ms 2168 KB Output is correct
5 Correct 70 ms 2012 KB Output is correct
6 Correct 21 ms 1116 KB Output is correct
7 Correct 39 ms 1492 KB Output is correct
8 Correct 48 ms 1660 KB Output is correct
9 Correct 15 ms 1112 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 860 KB Output is correct
2 Correct 3 ms 864 KB Output is correct
3 Correct 3 ms 856 KB Output is correct
4 Correct 1236 ms 972 KB Output is correct
5 Correct 812 ms 976 KB Output is correct
6 Correct 20 ms 856 KB Output is correct
7 Correct 80 ms 856 KB Output is correct
8 Correct 100 ms 876 KB Output is correct
9 Incorrect 94 ms 864 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 75 ms 2004 KB Output is correct
2 Incorrect 58 ms 2772 KB Output isn't correct
3 Halted 0 ms 0 KB -