제출 #649945

#제출 시각아이디문제언어결과실행 시간메모리
649945ymmBalloons (CEOI11_bal)C++17
70 / 100
2096 ms2936 KiB
#include <bits/stdc++.h>
#define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x)
#define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x)
typedef long long ll;
typedef std::pair<int, int> pii;
typedef std::pair<ll , ll > pll;
using namespace std;

typedef pair<double, double> pdd;

pdd in()
{
	ll x, y;
	cin >> x >> y;
	return {x, y};
}

const int N = 200'010;

double a[N], b[N] = {1e30};
int len = 0;

void insert(pdd f)
{
	a[len] = f.first;
	b[len] = f.second;
	++len;
}

/*__attribute__((optimize("Ofast,unroll-loops"),target("avx2,fma")))
double get_ans(double x, bool side)
{
	#define MIN(x, y) ((x)>(y)?(y):(x))
	double ans = 1e30;
	if (side) {
		Loop (i,1,len) {
			double tmp = a[i]*x + b[i];
			ans = MIN(ans, tmp);
		}
	} else {
		LoopR (i,1,len) {
			double tmp = a[i]*x + b[i];
			ans = MIN(ans, tmp);
		}
	}
	return ans;
	#undef MIN
}*/
double get_ans(double x, bool side);
asm("\n"
"	.p2align 4\n"
"	.globl	_Z7get_ansdb\n"
"	.type	_Z7get_ansdb, @function\n"
"_Z7get_ansdb:\n"
".myLFB9908:\n"
"	.cfi_startproc\n"
"	vmovsd	%xmm0, %xmm0, %xmm1\n"
"	movslq	len(%rip), %rax\n"
"	vmovsd	a(%rip), %xmm0\n"
"	leaq	a(%rip), %rdx\n"
"	vfmadd213sd	b(%rip), %xmm1, %xmm0\n"
"	leaq	b(%rip), %rcx\n"
"	testb	%dil, %dil\n"
"	je	.myL8\n"
"	cmpl	$1, %eax\n"
"	jle	.myL107\n"
"	movslq	%eax, %r8\n"
"	leaq	-2(%r8), %rax\n"
"	leaq	-1(%r8), %r9\n"
"	cmpq	$2, %rax\n"
"	jbe	.myL22\n"
"	movq	%r9, %rsi\n"
"	vbroadcastsd	%xmm0, %ymm0\n"
"	vbroadcastsd	%xmm1, %ymm3\n"
"	movl	$8, %eax\n"
"	shrq	$2, %rsi\n"
"	salq	$5, %rsi\n"
"	leaq	8(%rsi), %rdi\n"
"	subq	$32, %rsi\n"
"	shrq	$5, %rsi\n"
"	addq	$1, %rsi\n"
"	andl	$7, %esi\n"
"	je	.myL11\n"
"	cmpq	$1, %rsi\n"
"	je	.myL72\n"
"	cmpq	$2, %rsi\n"
"	je	.myL73\n"
"	cmpq	$3, %rsi\n"
"	je	.myL74\n"
"	cmpq	$4, %rsi\n"
"	je	.myL75\n"
"	cmpq	$5, %rsi\n"
"	je	.myL76\n"
"	cmpq	$6, %rsi\n"
"	je	.myL77\n"
"	vmovupd	8+a(%rip), %ymm2\n"
"	movl	$40, %eax\n"
"	vfmadd213pd	8+b(%rip), %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL77:\n"
"	vmovupd	(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	(%rcx,%rax), %ymm3, %ymm2\n"
"	addq	$32, %rax\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL76:\n"
"	vmovupd	(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	(%rcx,%rax), %ymm3, %ymm2\n"
"	addq	$32, %rax\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL75:\n"
"	vmovupd	(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	(%rcx,%rax), %ymm3, %ymm2\n"
"	addq	$32, %rax\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL74:\n"
"	vmovupd	(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	(%rcx,%rax), %ymm3, %ymm2\n"
"	addq	$32, %rax\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL73:\n"
"	vmovupd	(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	(%rcx,%rax), %ymm3, %ymm2\n"
"	addq	$32, %rax\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL72:\n"
"	vmovupd	(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	(%rcx,%rax), %ymm3, %ymm2\n"
"	addq	$32, %rax\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	cmpq	%rdi, %rax\n"
"	je	.myL102\n"
".myL11:\n"
"	vmovupd	(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	(%rcx,%rax), %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vmovupd	32(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	32(%rcx,%rax), %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vmovupd	64(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	64(%rcx,%rax), %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vmovupd	96(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	96(%rcx,%rax), %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vmovupd	128(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	128(%rcx,%rax), %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vmovupd	160(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	160(%rcx,%rax), %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vmovupd	192(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	192(%rcx,%rax), %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vmovupd	224(%rdx,%rax), %ymm2\n"
"	vfmadd213pd	224(%rcx,%rax), %ymm3, %ymm2\n"
"	addq	$256, %rax\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	cmpq	%rdi, %rax\n"
"	jne	.myL11\n"
".myL102:\n"
"	vextractf128	$0x1, %ymm0, %xmm2\n"
"	movq	%r9, %rdi\n"
"	vminpd	%xmm0, %xmm2, %xmm2\n"
"	andq	$-4, %rdi\n"
"	leaq	1(%rdi), %rsi\n"
"	vunpckhpd	%xmm2, %xmm2, %xmm0\n"
"	vminpd	%xmm2, %xmm0, %xmm0\n"
"	cmpq	%r9, %rdi\n"
"	je	.myL111\n"
"	vzeroupper\n"
".myL10:\n"
"	movq	%r8, %rax\n"
"	subq	%rdi, %rax\n"
"	leaq	-1(%rax), %r9\n"
"	cmpq	$2, %rax\n"
"	je	.myL14\n"
"	vmovupd	8(%rcx,%rdi,8), %xmm7\n"
"	vmovddup	%xmm1, %xmm2\n"
"	vmovddup	%xmm0, %xmm0\n"
"	movq	%r9, %rax\n"
"	vfmadd132pd	8(%rdx,%rdi,8), %xmm7, %xmm2\n"
"	andq	$-2, %rax\n"
"	addq	%rax, %rsi\n"
"	vminpd	%xmm2, %xmm0, %xmm0\n"
"	vunpckhpd	%xmm0, %xmm0, %xmm2\n"
"	vminpd	%xmm0, %xmm2, %xmm0\n"
"	cmpq	%rax, %r9\n"
"	je	.myL107\n"
".myL14:\n"
"	vmovsd	(%rcx,%rsi,8), %xmm5\n"
"	vfmadd132sd	(%rdx,%rsi,8), %xmm5, %xmm1\n"
"	vminsd	%xmm1, %xmm0, %xmm0\n"
"	ret\n"
"	.p2align 4,,10\n"
"	.p2align 3\n"
".myL8:\n"
"	leal	-1(%rax), %esi\n"
"	movslq	%esi, %r8\n"
"	testl	%esi, %esi\n"
"	jle	.myL107\n"
"	pushq	%rbp\n"
"	.cfi_def_cfa_offset 16\n"
"	.cfi_offset 6, -16\n"
"	movq	%r8, %r11\n"
"	movq	%rsp, %rbp\n"
"	.cfi_def_cfa_register 6\n"
"	pushq	%rbx\n"
"	.cfi_offset 3, -24\n"
"	cmpq	$3, %r8\n"
"	jle	.myL23\n"
"	movq	%r8, %rbx\n"
"	movslq	%eax, %rsi\n"
"	vbroadcastsd	%xmm0, %ymm0\n"
"	xorl	%edi, %edi\n"
"	shrq	$2, %rbx\n"
"	leaq	-32(,%rsi,8), %r9\n"
"	vbroadcastsd	%xmm1, %ymm4\n"
"	negq	%rbx\n"
"	leaq	(%rdx,%r9), %r10\n"
"	addq	%rcx, %r9\n"
"	salq	$5, %rbx\n"
"	movq	%rbx, %rsi\n"
"	negq	%rsi\n"
"	subq	$32, %rsi\n"
"	shrq	$5, %rsi\n"
"	addq	$1, %rsi\n"
"	andl	$7, %esi\n"
"	je	.myL17\n"
"	cmpq	$1, %rsi\n"
"	je	.myL78\n"
"	cmpq	$2, %rsi\n"
"	je	.myL79\n"
"	cmpq	$3, %rsi\n"
"	je	.myL80\n"
"	cmpq	$4, %rsi\n"
"	je	.myL81\n"
"	cmpq	$5, %rsi\n"
"	je	.myL82\n"
"	cmpq	$6, %rsi\n"
"	je	.myL83\n"
"	vpermpd	$27, (%r10), %ymm2\n"
"	vpermpd	$27, (%r9), %ymm3\n"
"	movq	$-32, %rdi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL83:\n"
"	vpermpd	$27, (%r10,%rdi), %ymm2\n"
"	vpermpd	$27, (%r9,%rdi), %ymm3\n"
"	subq	$32, %rdi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL82:\n"
"	vpermpd	$27, (%r10,%rdi), %ymm2\n"
"	vpermpd	$27, (%r9,%rdi), %ymm3\n"
"	subq	$32, %rdi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL81:\n"
"	vpermpd	$27, (%r10,%rdi), %ymm2\n"
"	vpermpd	$27, (%r9,%rdi), %ymm3\n"
"	subq	$32, %rdi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL80:\n"
"	vpermpd	$27, (%r10,%rdi), %ymm2\n"
"	vpermpd	$27, (%r9,%rdi), %ymm3\n"
"	subq	$32, %rdi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL79:\n"
"	vpermpd	$27, (%r10,%rdi), %ymm2\n"
"	vpermpd	$27, (%r9,%rdi), %ymm3\n"
"	subq	$32, %rdi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
".myL78:\n"
"	vpermpd	$27, (%r10,%rdi), %ymm2\n"
"	vpermpd	$27, (%r9,%rdi), %ymm3\n"
"	subq	$32, %rdi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	cmpq	%rdi, %rbx\n"
"	je	.myL103\n"
".myL17:\n"
"	vpermpd	$27, (%r9,%rdi), %ymm3\n"
"	vpermpd	$27, (%r10,%rdi), %ymm2\n"
"	leaq	-32(%rdi), %rsi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vpermpd	$27, -32(%r9,%rdi), %ymm3\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vpermpd	$27, -32(%r10,%rdi), %ymm2\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vpermpd	$27, -64(%r9,%rdi), %ymm3\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vpermpd	$27, -64(%r10,%rdi), %ymm2\n"
"	leaq	-224(%rsi), %rdi\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vpermpd	$27, -64(%r9,%rsi), %ymm3\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vpermpd	$27, -64(%r10,%rsi), %ymm2\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vpermpd	$27, -96(%r9,%rsi), %ymm3\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vpermpd	$27, -96(%r10,%rsi), %ymm2\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vpermpd	$27, -128(%r9,%rsi), %ymm3\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vpermpd	$27, -128(%r10,%rsi), %ymm2\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vpermpd	$27, -160(%r9,%rsi), %ymm3\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vpermpd	$27, -160(%r10,%rsi), %ymm2\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vpermpd	$27, -192(%r9,%rsi), %ymm3\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	vpermpd	$27, -192(%r10,%rsi), %ymm2\n"
"	vfmadd132pd	%ymm4, %ymm3, %ymm2\n"
"	vminpd	%ymm2, %ymm0, %ymm0\n"
"	cmpq	%rdi, %rbx\n"
"	jne	.myL17\n"
".myL103:\n"
"	vextractf128	$0x1, %ymm0, %xmm2\n"
"	movq	%r8, %rsi\n"
"	vminpd	%xmm0, %xmm2, %xmm2\n"
"	andq	$-4, %rsi\n"
"	subq	%rsi, %r8\n"
"	vunpckhpd	%xmm2, %xmm2, %xmm0\n"
"	vminpd	%xmm2, %xmm0, %xmm0\n"
"	cmpq	%rsi, %r11\n"
"	je	.myL112\n"
"	vzeroupper\n"
".myL16:\n"
"	subq	%rsi, %r11\n"
"	cmpq	$1, %r11\n"
"	je	.myL20\n"
"	subq	%rsi, %rax\n"
"	vmovddup	%xmm1, %xmm3\n"
"	vmovddup	%xmm0, %xmm0\n"
"	vpermilpd	$1, -16(%rdx,%rax,8), %xmm2\n"
"	vpermilpd	$1, -16(%rcx,%rax,8), %xmm4\n"
"	movq	%r11, %rax\n"
"	andq	$-2, %rax\n"
"	vfmadd132pd	%xmm3, %xmm4, %xmm2\n"
"	subq	%rax, %r8\n"
"	vminpd	%xmm2, %xmm0, %xmm0\n"
"	vunpckhpd	%xmm0, %xmm0, %xmm2\n"
"	vminpd	%xmm0, %xmm2, %xmm0\n"
"	cmpq	%rax, %r11\n"
"	je	.myL7\n"
".myL20:\n"
"	vmovsd	(%rcx,%r8,8), %xmm6\n"
"	vfmadd132sd	(%rdx,%r8,8), %xmm6, %xmm1\n"
"	vminsd	%xmm1, %xmm0, %xmm0\n"
".myL7:\n"
"	movq	-8(%rbp), %rbx\n"
"	leave\n"
"	.cfi_def_cfa 7, 8\n"
"	ret\n"
"	.p2align 4,,10\n"
"	.p2align 3\n"
".myL107:\n"
"	.cfi_restore 3\n"
"	.cfi_restore 6\n"
"	ret\n"
"	.p2align 4,,10\n"
"	.p2align 3\n"
".myL112:\n"
"	.cfi_def_cfa 6, 16\n"
"	.cfi_offset 3, -24\n"
"	.cfi_offset 6, -16\n"
"	vzeroupper\n"
"	movq	-8(%rbp), %rbx\n"
"	leave\n"
"	.cfi_def_cfa 7, 8\n"
"	ret\n"
"	.p2align 4,,10\n"
"	.p2align 3\n"
".myL111:\n"
"	.cfi_restore 3\n"
"	.cfi_restore 6\n"
"	vzeroupper\n"
"	ret\n"
".myL22:\n"
"	xorl	%edi, %edi\n"
"	movl	$1, %esi\n"
"	jmp	.myL10\n"
".myL23:\n"
"	.cfi_def_cfa 6, 16\n"
"	.cfi_offset 3, -24\n"
"	.cfi_offset 6, -16\n"
"	xorl	%esi, %esi\n"
"	jmp	.myL16\n"
"	.cfi_endproc\n"
".myLFE9908:\n"
"	.size	_Z7get_ansdb, .-_Z7get_ansdb\n"
);

int main()
{
	cin.tie(0) -> sync_with_stdio(false);
	cout << fixed << setprecision(3);
	int n;
	cin >> n;
	Loop (i,0,n) {
		auto [x, r] = in();
		r = sqrt(r);
		r = min(r, get_ans(x, i&1));
		cout << r*r << '\n';
		insert({0.5/r, -x*0.5/r});
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...