제출 #52849

#제출 시각아이디문제언어결과실행 시간메모리
52849zetapi휴가 (IOI14_holiday)C++14
컴파일 에러
0 ms0 KiB
//#include <holiday.h>
#include <bits/stdc++.h>
using namespace std;
 
#define pb  push_back
#define mp  make_pair
#define ll long long
#define itr ::iterator 
 
typedef pair<ll,ll>  pii;
 
const int MAX=3e5;
 
struct data
{
	ll ind;
	ll sum;
}	seg[MAX];
 
vector<pii> sorted;
 
ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
 
void build(int low,int high,int node)
{
	if(low==high)
	{
		R[low]=delta;
		if(low<=sorted.size())
		{
			seg[node].ind=1;
			seg[node].sum=sorted[low-1].first;
		}
		else
		{
			seg[node].ind=0;
			seg[node].sum=0;
		}
		return ;
	}
	int mid=(low+high)/2;
	build(low,mid,2*node);
	build(mid+1,high,2*node+1);
	seg[node].ind=seg[2*node].ind+seg[2*node+1].ind;
	seg[node].sum=seg[2*node].sum+seg[2*node+1].sum;
	return ;
}
 
void update(int low,int high,int node,int idx,int delta)
{
	if(idx>sorted.size() or idx<1)
		return ;
	if(low==high)
	{
		R[row]=delta;
		seg[node].ind=delta;
		if(delta)
			seg[node].sum=sorted[low-1].first;
		else
			seg[node].sum=0;
		return ;
	}
	int mid=(low+high)/2;
	if(idx>=low and idx<=mid)
		update(low,mid,2*node,idx,delta);
	else
		update(mid+1,high,2*node+1,idx,delta);
	seg[node].ind=seg[2*node].ind+seg[2*node+1].ind;
	seg[node].sum=seg[2*node].sum+seg[2*node+1].sum;
	return ;
} 
 
ll query(int low,int high,int node,int K)
{
	if(low==high)
		return seg[node].sum;
	int mid=(low+high)/2;
	if(seg[2*node].ind>=K)
		return query(low,mid,2*node,K);
	return seg[2*node].sum+query(mid+1,high,2*node+1,K-seg[2*node].ind);
}
 
ll cal(int idx,int qlow,int qhigh,int type)
{
	int rem;
	pii res=mp(0,-qlow);
	//for(int A=qhigh+1;A<=N;A++)
		update(1,N,1,pos[qhigh+1],0);
	for(int A=qhigh;A>=qlow;A--)
	{
		rem=idx-(type+1)*(A-Start);
		if(rem>0)
			res=max(res,mp(query(1,N,1,rem),(ll)-A));
		update(1,N,1,pos[A],0);
	}
	for(int A=qlow;A<=qhigh;A++)
		update(1,N,1,pos[A],1);
	fans[idx][type]=res.first;
	return -res.second;
}
 
ll cal2(int idx,int qlow,int qhigh,int type)
{
	int rem;
	pii res=mp(0,qhigh);
	//for(int A=1;A<qlow;A++)
		update(1,N,1,pos[qlow-1],0);
	for(int A=qlow;A<=qhigh;A++)
	{	
		rem=idx-(type+1)*(Start-A);
		if(rem>0)
			res=max(res,mp(query(1,N,1,rem),(ll)A));
		update(1,N,1,pos[A],0);
	}
	for(int A=qlow;A<=qhigh;A++)
		update(1,N,1,pos[A],1);
	gans[idx][type]=res.first;
	return res.second;
}
 
void cal(int low,int high,int qlow,int qhigh,int type)
{
	if(low>high)
		return ;
	int mid=(low+high)/2;
	f[mid][type]=cal(mid,qlow,qhigh,type);
	if(low==high)
	{
		for(int A=qlow+1;A<qhigh;A++)
			update(1,N,1,pos[A],0);
		return ;
	}
	cal(mid+1,high,f[mid][type],qhigh,type);
	cal(low,mid-1,qlow,f[mid][type],type);
	return ;
}
 //#include <holiday.h>
#include <bits/stdc++.h>
using namespace std;
 
#define pb  push_back
#define mp  make_pair
#define ll long long
#define itr ::iterator 
 
typedef pair<ll,ll>  pii;
 
const int MAX=3e5;
 
struct data
{
	ll ind;
	ll sum;
}	seg[MAX];
 
vector<pii> sorted;
 
ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
 
void build(int low,int high,int node)
{
	if(low==high)
	{
		if(low<=sorted.size())
		{
			seg[node].ind=1;
			seg[node].sum=sorted[low-1].first;
		}
		else
		{
			seg[node].ind=0;
			seg[node].sum=0;
		}
		return ;
	}
	int mid=(low+high)/2;
	build(low,mid,2*node);
	build(mid+1,high,2*node+1);
	seg[node].ind=seg[2*node].ind+seg[2*node+1].ind;
	seg[node].sum=seg[2*node].sum+seg[2*node+1].sum;
	return ;
}
 
void update(int low,int high,int node,int idx,int delta)
{
	if(idx>sorted.size() or idx<1)
		return ;
	if(low==high)
	{
		R[low]=delta;
		seg[node].ind=delta;
		if(delta)
			seg[node].sum=sorted[low-1].first;
		else
			seg[node].sum=0;
		return ;
	}
	int mid=(low+high)/2;
	if(idx>=low and idx<=mid)
		update(low,mid,2*node,idx,delta);
	else
		update(mid+1,high,2*node+1,idx,delta);
	seg[node].ind=seg[2*node].ind+seg[2*node+1].ind;
	seg[node].sum=seg[2*node].sum+seg[2*node+1].sum;
	return ;
} 
 
ll query(int low,int high,int node,int K)
{
	if(low==high)
		return seg[node].sum;
	int mid=(low+high)/2;
	if(seg[2*node].ind>=K)
		return query(low,mid,2*node,K);
	return seg[2*node].sum+query(mid+1,high,2*node+1,K-seg[2*node].ind);
}
 
ll cal(int idx,int qlow,int qhigh,int type)
{
	int rem;
	pii res=mp(0,-qlow);
	//for(int A=qhigh+1;A<=N;A++)
		update(1,N,1,pos[qhigh+1],0);
	for(int A=qhigh;A>=qlow;A--)
	{
		rem=idx-(type+1)*(A-Start);
		if(rem>0)
			res=max(res,mp(query(1,N,1,rem),(ll)-A));
		update(1,N,1,pos[A],0);
	}
	for(int A=qlow;A<=qhigh;A++)
		update(1,N,1,pos[A],1);
	fans[idx][type]=res.first;
	return -res.second;
}
 
ll cal2(int idx,int qlow,int qhigh,int type)
{
	int rem;
	pii res=mp(0,qhigh);
	//for(int A=1;A<qlow;A++)
		update(1,N,1,pos[qlow-1],0);
	for(int A=qlow;A<=qhigh;A++)
	{	
		rem=idx-(type+1)*(Start-A);
		if(rem>0)
			res=max(res,mp(query(1,N,1,rem),(ll)A));
		update(1,N,1,pos[A],0);
	}
	for(int A=qlow;A<=qhigh;A++)
		update(1,N,1,pos[A],1);
	gans[idx][type]=res.first;
	return res.second;
}
 
void cal(int low,int high,int qlow,int qhigh,int type)
{
	if(low>high)
		return ;
	int mid=(low+high)/2;
	f[mid][type]=cal(mid,qlow,qhigh,type);
	if(low==high)
	{
		for(int A=qlow+1;A<qhigh;A++)
			update(1,N,1,pos[A],0);
		return ;
	}
	cal(mid+1,high,f[mid][type],qhigh,type);
	cal(low,mid-1,qlow,f[mid][type],type);
	return ;
}
 
void cal2(int low,int high,int qlow,int qhigh,int type)
{
	if(low>high)
		return ;
	int mid=(low+high)/2;
	g[mid][type]=cal2(mid,qlow,qhigh,type);
	if(low==high)
	{
		for(int A=qlow;A<qhigh;A++)
			update(1,N,1,pos[A],0);
		return ;
	}
	cal2(mid+1,high,qlow,g[mid][type],type);
	cal2(low,mid-1,g[mid][type],qhigh,type);
	return ;
}
 
ll find(int D)
{
	ll res=0;
	for(int A=0;A<=D;A++)
	{
		//cout<<A<<"\n";
		//cout<<f[A][1]<<" hola "<<fans[A][1]<<"\n";
		//cout<<g[A][1]<<" hola "<<gans[A][1]<<"\n";
		res=max(res,fans[A][1]+gans[D-A][0]);
		res=max(res,gans[A][1]+fans[D-A][0]);
	}
	return res;
}
 
long long int findMaxAttraction(int n,int start,int d,int attraction[])
{
	N=n;
	D=d;
	Start=start+1;
	ll cur,res=0,tem=attraction[start];
	attraction[start]=0;
	for(int A=start;A<N;A++)
		sorted.pb(mp(attraction[A],A+1));
	sort(sorted.begin(),sorted.end());
	reverse(sorted.begin(),sorted.end());
	for(int A=0;A<sorted.size();A++)
		pos[sorted[A].second]=A+1;
	build(1,N,1);
	cal(1,D,Start,min(Start+D,N),0);
	build(1,N,1);
	cal(1,D,Start,min(Start+D,N),1);
	sorted.clear();
	for(int A=0;A<=start;A++)
		sorted.pb(mp(attraction[A],A+1));
	sort(sorted.begin(),sorted.end());
	reverse(sorted.begin(),sorted.end());
	for(int A=0;A<sorted.size();A++)
		pos[sorted[A].second]=A+1;
	build(1,N,1);
	cal2(1,D,max((ll)1,Start-D),Start,0);
	build(1,N,1);
	cal2(1,D,max((ll)1,Start-D),Start,1);
	f[0][0]=Start;
	f[0][1]=Start;
	g[0][0]=Start;
	g[0][1]=Start;
	res=max(res,find(D));
	res=max(res,tem+find(D-1));
	return res;
}
 
/*int main()
{
	ios_base::sync_with_stdio(false);
 
 
	int n,d,s,attraction[100000]={10,2,20,30,1};
	cout<<findMaxAttraction( n=5, s=2, d=7, attraction);
	return 0;
}*/
		//cout<<A<<"\n";
		//cout<<f[A][1]<<" hola "<<fans[A][1]<<"\n";
		//cout<<g[A][1]<<" hola "<<gans[A][1]<<"\n";
		res=max(res,fans[A][1]+gans[D-A][0]);
		res=max(res,gans[A][1]+fans[D-A][0]);
	}
	return res;
}
 
long long int findMaxAttraction(int n,int start,int d,int attraction[])
{
	N=n;
	D=d;
	Start=start+1;
	ll cur,res=0,tem=attraction[start];
	attraction[start]=0;
	for(int A=start;A<N;A++)
		sorted.pb(mp(attraction[A],A+1));
	sort(sorted.begin(),sorted.end());
	reverse(sorted.begin(),sorted.end());
	for(int A=0;A<sorted.size();A++)
		pos[sorted[A].second]=A+1;
	build(1,N,1);
	cal(1,D,Start,min(Start+D,N),0);
	build(1,N,1);
	cal(1,D,Start,min(Start+D,N),1);
	sorted.clear();
	for(int A=0;A<=start;A++)
		sorted.pb(mp(attraction[A],A+1));
	sort(sorted.begin(),sorted.end());
	reverse(sorted.begin(),sorted.end());
	for(int A=0;A<sorted.size();A++)
		pos[sorted[A].second]=A+1;
	build(1,N,1);
	cal2(1,D,max((ll)1,Start-D),Start,0);
	build(1,N,1);
	cal2(1,D,max((ll)1,Start-D),Start,1);
	f[0][0]=Start;
	f[0][1]=Start;
	g[0][0]=Start;
	g[0][1]=Start;
	res=max(res,find(D));
	res=max(res,tem+find(D-1));
	return res;
}
 
/*int main()
{
	ios_base::sync_with_stdio(false);
 
 
	int n,d,s,attraction[100000]={10,2,20,30,1};
	cout<<findMaxAttraction( n=5, s=2, d=7, attraction);
	return 0;
}*/

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

holiday.cpp: In function 'void build(int, int, int)':
holiday.cpp:28:10: error: 'delta' was not declared in this scope
   R[low]=delta;
          ^~~~~
holiday.cpp:28:10: note: suggested alternative: 'data'
   R[low]=delta;
          ^~~~~
          data
holiday.cpp:29:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(low<=sorted.size())
      ~~~^~~~~~~~~~~~~~~
holiday.cpp: In function 'void update(int, int, int, int, int)':
holiday.cpp:51:8: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(idx>sorted.size() or idx<1)
     ~~~^~~~~~~~~~~~~~
holiday.cpp:55:5: error: 'row' was not declared in this scope
   R[row]=delta;
     ^~~
holiday.cpp:55:5: note: suggested alternative: 'low'
   R[row]=delta;
     ^~~
     low
holiday.cpp: At global scope:
holiday.cpp:148:11: error: redefinition of 'const int MAX'
 const int MAX=3e5;
           ^~~
holiday.cpp:12:11: note: 'const int MAX' previously defined here
 const int MAX=3e5;
           ^~~
holiday.cpp:150:8: error: redefinition of 'struct data'
 struct data
        ^~~~
holiday.cpp:14:8: note: previous definition of 'struct data'
 struct data
        ^~~~
holiday.cpp:154:10: error: conflicting declaration 'int seg [300000]'
 } seg[MAX];
          ^
holiday.cpp:18:3: note: previous declaration as 'data seg [300000]'
 } seg[MAX];
   ^~~
holiday.cpp:156:13: error: redefinition of 'std::vector<std::pair<long long int, long long int> > sorted'
 vector<pii> sorted;
             ^~~~~~
holiday.cpp:20:13: note: 'std::vector<std::pair<long long int, long long int> > sorted' previously declared here
 vector<pii> sorted;
             ^~~~~~
holiday.cpp:158:4: error: redefinition of 'long long int N'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
    ^
holiday.cpp:22:4: note: 'long long int N' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
    ^
holiday.cpp:158:6: error: redefinition of 'long long int D'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
      ^
holiday.cpp:22:6: note: 'long long int D' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
      ^
holiday.cpp:158:8: error: redefinition of 'long long int Start'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
        ^~~~~
holiday.cpp:22:8: note: 'long long int Start' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
        ^~~~~
holiday.cpp:158:21: error: redefinition of 'long long int pos [300000]'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                     ^
holiday.cpp:22:14: note: 'long long int pos [300000]' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
              ^~~
holiday.cpp:158:28: error: redefinition of 'long long int R [300000]'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                            ^
holiday.cpp:22:23: note: 'long long int R [300000]' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                       ^
holiday.cpp:158:38: error: redefinition of 'long long int f [300000][2]'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                                      ^
holiday.cpp:22:30: note: 'long long int f [300000][2]' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                              ^
holiday.cpp:158:48: error: redefinition of 'long long int g [300000][2]'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                                                ^
holiday.cpp:22:40: note: 'long long int g [300000][2]' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                                        ^
holiday.cpp:158:61: error: redefinition of 'long long int fans [300000][2]'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                                                             ^
holiday.cpp:22:50: note: 'long long int fans [300000][2]' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                                                  ^~~~
holiday.cpp:158:74: error: redefinition of 'long long int gans [300000][2]'
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                                                                          ^
holiday.cpp:22:63: note: 'long long int gans [300000][2]' previously declared here
 ll N,D,Start,pos[MAX],R[MAX],f[MAX][2],g[MAX][2],fans[MAX][2],gans[MAX][2];
                                                               ^~~~
holiday.cpp: In function 'void build(int, int, int)':
holiday.cpp:160:6: error: redefinition of 'void build(int, int, int)'
 void build(int low,int high,int node)
      ^~~~~
holiday.cpp:24:6: note: 'void build(int, int, int)' previously defined here
 void build(int low,int high,int node)
      ^~~~~
holiday.cpp:164:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(low<=sorted.size())
      ~~~^~~~~~~~~~~~~~~
holiday.cpp: In function 'void update(int, int, int, int, int)':
holiday.cpp:184:6: error: redefinition of 'void update(int, int, int, int, int)'
 void update(int low,int high,int node,int idx,int delta)
      ^~~~~~
holiday.cpp:49:6: note: 'void update(int, int, int, int, int)' previously defined here
 void update(int low,int high,int node,int idx,int delta)
      ^~~~~~
holiday.cpp:186:8: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(idx>sorted.size() or idx<1)
     ~~~^~~~~~~~~~~~~~
holiday.cpp: In function 'long long int query(int, int, int, int)':
holiday.cpp:208:4: error: redefinition of 'long long int query(int, int, int, int)'
 ll query(int low,int high,int node,int K)
    ^~~~~
holiday.cpp:73:4: note: 'long long int query(int, int, int, int)' previously defined here
 ll query(int low,int high,int node,int K)
    ^~~~~
holiday.cpp: In function 'long long int cal(int, int, int, int)':
holiday.cpp:218:4: error: redefinition of 'long long int cal(int, int, int, int)'
 ll cal(int idx,int qlow,int qhigh,int type)
    ^~~
holiday.cpp:83:4: note: 'long long int cal(int, int, int, int)' previously defined here
 ll cal(int idx,int qlow,int qhigh,int type)
    ^~~
holiday.cpp: In function 'long long int cal2(int, int, int, int)':
holiday.cpp:237:4: error: redefinition of 'long long int cal2(int, int, int, int)'
 ll cal2(int idx,int qlow,int qhigh,int type)
    ^~~~
holiday.cpp:102:4: note: 'long long int cal2(int, int, int, int)' previously defined here
 ll cal2(int idx,int qlow,int qhigh,int type)
    ^~~~
holiday.cpp: In function 'void cal(int, int, int, int, int)':
holiday.cpp:256:6: error: redefinition of 'void cal(int, int, int, int, int)'
 void cal(int low,int high,int qlow,int qhigh,int type)
      ^~~
holiday.cpp:121:6: note: 'void cal(int, int, int, int, int)' previously defined here
 void cal(int low,int high,int qlow,int qhigh,int type)
      ^~~
holiday.cpp: In function 'long long int findMaxAttraction(int, int, int, int*)':
holiday.cpp:315:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int A=0;A<sorted.size();A++)
              ~^~~~~~~~~~~~~~
holiday.cpp:326:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int A=0;A<sorted.size();A++)
              ~^~~~~~~~~~~~~~
holiday.cpp:309:5: warning: unused variable 'cur' [-Wunused-variable]
  ll cur,res=0,tem=attraction[start];
     ^~~
holiday.cpp: At global scope:
holiday.cpp:353:3: error: 'res' does not name a type
   res=max(res,fans[A][1]+gans[D-A][0]);
   ^~~
holiday.cpp:354:3: error: 'res' does not name a type
   res=max(res,gans[A][1]+fans[D-A][0]);
   ^~~
holiday.cpp:355:2: error: expected declaration before '}' token
  }
  ^
grader.cpp: In function 'int main()':
grader.cpp:7:12: warning: variable 'n_s' set but not used [-Wunused-but-set-variable]
     int i, n_s;
            ^~~