제출 #73431

#제출 시각아이디문제언어결과실행 시간메모리
73431Sa1378커다란 상품 (IOI17_prize)C++17
100 / 100
176 ms3944 KiB
    #include "prize.h"
    #include <bits/stdc++.h>
    using namespace std;
    #define N ((int)201*1000)
     
    int n,arr[N],lft[N],rght[N];
    int cnt_rght[N],cnt_lft[N];
    bool mark[N];
     
    bool query(int x)
    {
    	if(lft[x]+rght[x]>0)return 0;
    	vector <int> vec;vec=ask(x);
    	lft[x]=vec[0];rght[x]=vec[1];
    	return (lft[x]+rght[x]==0);
    }
     
    void add(int x)
    {
    	mark[x]=1;
    	for(int i=x+1;i<n;i++)cnt_lft[i]++;
    	for(int i=x-1;i>=0;i--)cnt_rght[i]++;
    	return ;
    }
     
     
    int find_best(int n2)
    {
    	n=n2;
    	int now=0,id;
		queue <pair<int,int> > q;
		q.push({-1,n});
    	for(int i=0;i<600 && q.size();i++)
    	{
			int l=q.front().first,r=q.front().second;q.pop();
			if(l>=r-1)continue;
			int mid=(l+r)/2;
    		if(query(mid))return mid;
    		if(now<lft[mid]+rght[mid])
    			now=lft[mid]+rght[mid],id=mid;
			q.push({l,mid});
			q.push({mid,r});
    	}
		while(q.size())q.pop();
    	q.push({-1,n});
    	for(int i=0;i<600 && q.size();i++)
    	{
			int l=q.front().first,r=q.front().second;q.pop();
			if(l>=r-1)continue;
			int mid=(l+r)/2;
    		if(now>lft[mid]+rght[mid])
    			add(mid);
			q.push({l,mid});
			q.push({mid,r});
		}
		while(1)
    	{
    		int l=-1,r=n;
    		while(l<r-1)
    		{
    			int mid=(l+r)/2;
    			for(int i=0;;i++)
    			{
    				if(mid+i<r && !mark[mid+i])
    				{
    					mid=mid+i;
    					break;
    				}
    				if(mid-i>l && !mark[mid-i])
    				{
    					mid=mid-i;
    					break;
    				}
    			}
    			if(query(mid))return mid;
    			if(lft[mid]+rght[mid]<now)
    			{
    				add(mid);
    				break;
    			}
    			if((rght[mid]-cnt_rght[mid])-(rght[r]-cnt_rght[r])>0)l=mid;
    			else r=mid;
    		}
    	}
    	
    }

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

prize.cpp: In function 'int find_best(int)':
prize.cpp:39:7: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
       if(now<lft[mid]+rght[mid])
       ^~
prize.cpp:41:4: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
    q.push({l,mid});
    ^
prize.cpp:51:7: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
       if(now>lft[mid]+rght[mid])
       ^~
prize.cpp:53:4: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
    q.push({l,mid});
    ^
prize.cpp:30:16: warning: variable 'id' set but not used [-Wunused-but-set-variable]
      int now=0,id;
                ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...