Submission #759648

# Submission time Handle Problem Language Result Execution time Memory
759648 2023-06-16T13:54:21 Z Bula Xylophone (JOI18_xylophone) C++17
0 / 100
0 ms 208 KB
#include "xylophone.h"
#include<bits/stdc++.h>
using namespace std;

//#define int long long
const int mod=1e9+7;


void solve(int n){
	int id1,l=1,r=n;
	while(l<=r){
		int mid=(l+r)/2;
		int x=query(mid,n);

		if (x==n-1) {
			id1=mid;
			l=mid+1;
		}else{
			r=mid-1;
		}
	}
	int idn;
	l=id1+1;
	r=n;
	while(l<=r){
		int mid=(l+r)/2;
		int x=query(id1,mid); 
		
		if (x==n-1) {
			idn=mid;
			r=mid-1;
		}else{
			l=mid+1;
		}
	}
	
	vector<int> vis(n+1),ans(n+1);
	vis[1]=1;
	vis[n]=1;
	ans[id1]=1;
	ans[idn]=n;
	
	for(int i=id1-1;i>=1;i--){
		int q=query(i,i+1);
		
		int a=ans[i+1]+q;
		int b=ans[i+1]-q;
		
		if(b<=0 || vis[b]==1){
			ans[i]=a;
			vis[a]=1;
		}else if(a>n || vis[a]==1){
			ans[i]=b;
			vis[b]=1;
		}else{
			int x=query(i,i+2);
			int mx=max(a,max(ans[i+1],ans[i+2]));
			int mn=min(a,min(ans[i+1],ans[i+2]));
			if(x==mx-mn){
				ans[i]=a;
				vis[a]=1;
			}else{
				ans[i]=b;
				vis[b]=1;
			}
		}
	}
	
	for(int i=idn-1;i>id1;i--){
		int q=query(i,i+1);
		
		int a=ans[i+1]+q;
		int b=ans[i+1]-q;
		
		if(b<=0 || vis[b]==1){
			ans[i]=a;
			vis[a]=1;
		}else if(a>n || vis[a]==1){
			ans[i]=b;
			vis[b]=1;
		}else{
			int x=query(i,i+2);
			int mx=max(a,max(ans[i+1],ans[i+2]));
			int mn=min(a,min(ans[i+1],ans[i+2]));
			if(x==mx-mn){
				ans[i]=a;
				vis[a]=1;
			}else{
				ans[i]=b;
				vis[b]=1;
			}
		}
	}
	
	for(int i=idn+1;i<=n;i++){
		int q=query(i,i-1);
		
		int a=ans[i-1]+q;
		int b=ans[i-1]-q;
		
		if(b<=0 || vis[b]==1){
			ans[i]=a;
			vis[a]=1;
		}else if(a>n || vis[a]==1){
			ans[i]=b;
			vis[b]=1;
		}else{
			int x=query(i,i-2);
			int mx=max(a,max(ans[i-1],ans[i-2]));
			int mn=min(a,min(ans[i-1],ans[i-2]));
			if(x==mx-mn){
				ans[i]=a;
				vis[a]=1;
			}else{
				ans[i]=b;
				vis[b]=1;
			}
		}
	}
	for(int i=1;i<=n;i++) answer(i,ans[i]);
}

Compilation message

xylophone.cpp: In function 'void solve(int)':
xylophone.cpp:23:3: warning: 'id1' may be used uninitialized in this function [-Wmaybe-uninitialized]
   23 |  l=id1+1;
      |  ~^~~~~~
xylophone.cpp:95:10: warning: 'idn' may be used uninitialized in this function [-Wmaybe-uninitialized]
   95 |  for(int i=idn+1;i<=n;i++){
      |          ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 208 KB Output is correct
2 Incorrect 0 ms 208 KB Wrong Answer [1]
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 208 KB Output is correct
2 Incorrect 0 ms 208 KB Wrong Answer [1]
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 208 KB Output is correct
2 Incorrect 0 ms 208 KB Wrong Answer [1]
3 Halted 0 ms 0 KB -