제출 #112486

#제출 시각아이디문제언어결과실행 시간메모리
112486nafis_shifatSplit the sequence (APIO14_sequence)C++14
0 / 100
18 ms1920 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll> v;
ll cumsum[100008];
int mtg=-1;
int bs(int l,int r)
{
	int lo=l;
	int hi=r;
	int res=0;
	while(lo<=hi)
	{
		int mid=(lo+hi)/2;
	    
	    int a=cumsum[mid]-cumsum[l-1];
	    int b=cumsum[r]-cumsum[mid-1];
	    if(a>b)
	    {
	    	hi=mid-1;
	    	
		}
		else 
		{
			res=mid;
			lo=mid+1;
		}
		
	}
	mtg=res;	
	return (cumsum[res]-cumsum[l-1])*(cumsum[r]-cumsum[res]);	
	
}


int main()
{
	int n,k;
	cin>>n>>k;
	
	ll a[n+1];
	cumsum[0]=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		cumsum[i]=cumsum[i-1]+a[i];
		
	}
	
	set< pair<int,int> > segs;
	segs.insert({1,n});
	ll res=0;
	vector<int> fn;
	while(k--)
	{
		set<pair<int,int> >::iterator it=segs.begin();
		
		int curr=bs(it->first,it->second);
		int cl=it->first;
		int cr=it->second;
		
		int k=mtg;
		it++;
		for(;it!=segs.end();it++)
		{
			int tmp=bs(it->first,it->second);
			if(tmp>curr)
			{
				curr=tmp;
				cl=it->first;
				cr=it->second;
				k=mtg;
			}						
		}	
		res+=curr;
		segs.insert({cl,k});
		segs.insert({k+1,cr});
		segs.erase({cl,cr});
		
		fn.push_back(k);
					
	}
	cout<<res<<endl;
	for(int i=0;i<fn.size();i++)cout<<fn[i]<<" ";
}

컴파일 시 표준 에러 (stderr) 메시지

sequence.cpp: In function 'int main()':
sequence.cpp:84:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<fn.size();i++)cout<<fn[i]<<" ";
              ~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...