# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1170030 | user736482 | Minerals (JOI19_minerals) | C++20 | 0 ms | 0 KiB |
#include "minerals.h"
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 998244353
#define POT 4194304
#define INF 1000000019
#define INFL 1000000000000000099LL
vector<ll>ind,szuk;
void Solve(ll n){
ll pop=0;
for(ll i=1;i<=2*n;i++){
if(Query(i)>pop){
pop++;
ind.pb(i);
// cout<<i<<"1 ";
}
else{
szuk.pb(i);
// cout<<i<<"2 ";
}
}
for(ll i=1;i<=2*n;i++)
Query(i);
ll gdzie[2*n+7];
for(ll i=0;i<2*n+7;i++)gdzie[i]=0;
for(ll i=0;i<14;i++){
for(ll j=0;j<n;j++){
if(j&(1<<i)){
// cout<<j<<"1 ";
pop=Query(ind[j]);
}
}
for(ll j=0;j<n;j++){
// cout<<j<<"2 ";
if(pop==Query(szuk[j])){
gdzie[j]+=(1<<i);
}
else{
pop++;
}
}
for(ll j=0;j<n;j++){
if(j&(1<<i)){
pop=Query(ind[j]);
}
}
for(ll j=0;j<n;j++){
pop=Query(szuk[j]);
}
}
for(ll i=0;i<n;i++){
Answer(szuk[i],ind[gdzie[i]]);
}
}