# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
433880 | LouayFarah | Xylophone (JOI18_xylophone) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
#include "xylophone.h"
using namespace std;
#define pb push_back
void solve(int n)
{
vector<int> arr(n+1);
/*for(auto elt: arr)
cout << elt << ' ';
cout << endl;*/
orig.resize(n+1);
for(int i = 1; i<=n; i++)
cin >> orig[i];
int l = 1, r = n-1;
int maxdif = n-1;
while(maxdif==n-1)
{
maxdif = query(l, r);
r--;
}
r+=2, l++;
maxdif = n-1;
while(maxdif==n-1)
{
maxdif = query(l, r);
l++;
}
l-=2;
arr[l] = 1;
arr[r] = n;
//cout << l << ' ' << r << endl;
if(r-l>1)
{
maxdif = query(l, l+1);
arr[l+1] = maxdif+1;
}
for(int i = l+2; i<r; i++)
{
int dif = query(l, i);
if(dif==maxdif)
{
int dif2 = query(l+1, i);
arr[i] = arr[l+1]-dif2;
}
else
{
arr[i] = dif + 1;
}
}
if(l>1)
{
maxdif = query(l-1, l);
arr[l-1] = maxdif+1;
}
for(int i = l-2; i>=1; i--)
{
int dif = query(i, l);
if(dif==maxdif)
{
int dif2 = query(l-1, i);
arr[i] = arr[l-1]-dif2;
}
else
{
arr[i] = dif+1;
}
}
if(r<n)
{
maxdif = query(r, r+1);
arr[r+1] = n-maxdif;
}
for(int i = r+2; i<=n; i++)
{
int dif = query(r, i);
if(dif==maxdif)
{
int dif2 = query(r+1, i);
arr[i] = arr[r+1] + dif2;
}
else
{
arr[i] = n-dif;
}
}
for(int i = 1; i<=n; i++)
{
answer(i, arr[i]);
}
}