Submission #644586

#TimeUsernameProblemLanguageResultExecution timeMemory
644586ymmFortune Telling 2 (JOI14_fortune_telling2)C++17
35 / 100
3057 ms6856 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (l); --x) typedef long long ll; typedef std::pair<int, int> pii; typedef std::pair<ll , ll > pll; using namespace std; const int N = 200'010; int a[N], b[N]; int n; /* void up(int x) { Loop (i,0,n) a[i] ^= a[i] <= x? b[i]: 0; } */ void up(int); asm("\n" " .text\n" " .p2align 4\n" " .globl _Z2upi\n" " .type _Z2upi, @function\n" "_Z2upi:\n" ".myLFB9703:\n" " .cfi_startproc\n" " movl %edi, %r8d\n" " movslq n(%rip), %rdi\n" " testq %rdi, %rdi\n" " jle .myL53\n" " leaq -1(%rdi), %rax\n" " cmpq $6, %rax\n" " jbe .myL14\n" " movq %rdi, %rcx\n" " leaq a(%rip), %rsi\n" " vmovd %r8d, %xmm3\n" " shrq $3, %rcx\n" " vpbroadcastd %xmm3, %ymm3\n" " movq %rsi, %rax\n" " salq $5, %rcx\n" " leaq b(%rip), %rdx\n" " leaq (%rsi,%rcx), %r9\n" " subq $32, %rcx\n" " shrq $5, %rcx\n" " addq $1, %rcx\n" " andl $7, %ecx\n" " je .myL4\n" " cmpq $1, %rcx\n" " je .myL37\n" " cmpq $2, %rcx\n" " je .myL38\n" " cmpq $3, %rcx\n" " je .myL39\n" " cmpq $4, %rcx\n" " je .myL40\n" " cmpq $5, %rcx\n" " je .myL41\n" " cmpq $6, %rcx\n" " jne .myL55\n" ".myL42:\n" " vmovdqa (%rax), %ymm1\n" " vpxor (%rdx), %ymm1, %ymm0\n" " addq $32, %rax\n" " addq $32, %rdx\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, -32(%rax)\n" ".myL41:\n" " vmovdqa (%rax), %ymm1\n" " vpxor (%rdx), %ymm1, %ymm0\n" " addq $32, %rax\n" " addq $32, %rdx\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, -32(%rax)\n" ".myL40:\n" " vmovdqa (%rax), %ymm1\n" " vpxor (%rdx), %ymm1, %ymm0\n" " addq $32, %rax\n" " addq $32, %rdx\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, -32(%rax)\n" ".myL39:\n" " vmovdqa (%rax), %ymm1\n" " vpxor (%rdx), %ymm1, %ymm0\n" " addq $32, %rax\n" " addq $32, %rdx\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, -32(%rax)\n" ".myL38:\n" " vmovdqa (%rax), %ymm1\n" " vpxor (%rdx), %ymm1, %ymm0\n" " addq $32, %rax\n" " addq $32, %rdx\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, -32(%rax)\n" ".myL37:\n" " vmovdqa (%rax), %ymm1\n" " vpxor (%rdx), %ymm1, %ymm0\n" " addq $32, %rax\n" " addq $32, %rdx\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, -32(%rax)\n" " cmpq %r9, %rax\n" " je .myL51\n" ".myL4:\n" " vmovdqa (%rax), %ymm1\n" " vpxor (%rdx), %ymm1, %ymm0\n" " leaq 32(%rax), %rcx\n" " addq $256, %rdx\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa 32(%rax), %ymm1\n" " vmovdqa %ymm0, (%rax)\n" " vpxor -224(%rdx), %ymm1, %ymm0\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa 64(%rax), %ymm1\n" " vmovdqa %ymm0, 32(%rax)\n" " vpxor -192(%rdx), %ymm1, %ymm0\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, 64(%rax)\n" " vmovdqa 64(%rcx), %ymm1\n" " vpxor -160(%rdx), %ymm1, %ymm0\n" " leaq 224(%rcx), %rax\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa 96(%rcx), %ymm1\n" " vmovdqa %ymm0, 64(%rcx)\n" " vpxor -128(%rdx), %ymm1, %ymm0\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa 128(%rcx), %ymm1\n" " vmovdqa %ymm0, 96(%rcx)\n" " vpxor -96(%rdx), %ymm1, %ymm0\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa 160(%rcx), %ymm1\n" " vmovdqa %ymm0, 128(%rcx)\n" " vpxor -64(%rdx), %ymm1, %ymm0\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa 192(%rcx), %ymm1\n" " vmovdqa %ymm0, 160(%rcx)\n" " vpxor -32(%rdx), %ymm1, %ymm0\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, 192(%rcx)\n" " cmpq %r9, %rax\n" " jne .myL4\n" ".myL51:\n" " movq %rdi, %rdx\n" " andq $-8, %rdx\n" " movq %rdx, %rax\n" " cmpq %rdx, %rdi\n" " je .myL56\n" " vzeroupper\n" ".myL3:\n" " movq %rdi, %rcx\n" " subq %rdx, %rcx\n" " leaq -1(%rcx), %r9\n" " cmpq $2, %r9\n" " jbe .myL8\n" " leaq (%rsi,%rdx,4), %r9\n" " vmovd %r8d, %xmm4\n" " leaq b(%rip), %r10\n" " vmovdqa (%r9), %xmm2\n" " vpshufd $0, %xmm4, %xmm0\n" " vpxor (%r10,%rdx,4), %xmm2, %xmm1\n" " movq %rcx, %rdx\n" " andq $-4, %rdx\n" " vpcmpgtd %xmm0, %xmm2, %xmm0\n" " addq %rdx, %rax\n" " vpblendvb %xmm0, %xmm2, %xmm1, %xmm0\n" " vmovdqa %xmm0, (%r9)\n" " cmpq %rdx, %rcx\n" " je .myL53\n" ".myL8:\n" " movl (%rsi,%rax,4), %edx\n" " cmpl %r8d, %edx\n" " jle .myL57\n" ".myL10:\n" " movl %edx, (%rsi,%rax,4)\n" " leaq 1(%rax), %rdx\n" " cmpq %rdx, %rdi\n" " jle .myL53\n" " movl (%rsi,%rdx,4), %ecx\n" " cmpl %ecx, %r8d\n" " jl .myL11\n" " leaq b(%rip), %r9\n" " xorl (%r9,%rdx,4), %ecx\n" ".myL11:\n" " addq $2, %rax\n" " movl %ecx, (%rsi,%rdx,4)\n" " cmpq %rax, %rdi\n" " jle .myL53\n" " movl (%rsi,%rax,4), %edx\n" " cmpl %edx, %r8d\n" " jl .myL13\n" " leaq b(%rip), %rcx\n" " xorl (%rcx,%rax,4), %edx\n" ".myL13:\n" " movl %edx, (%rsi,%rax,4)\n" " ret\n" " .p2align 4,,10\n" " .p2align 3\n" ".myL53:\n" " ret\n" " .p2align 4,,10\n" " .p2align 3\n" ".myL57:\n" " leaq b(%rip), %rcx\n" " xorl (%rcx,%rax,4), %edx\n" " jmp .myL10\n" " .p2align 4,,10\n" " .p2align 3\n" ".myL55:\n" " vmovdqa (%rsi), %ymm1\n" " vpxor (%rdx), %ymm1, %ymm0\n" " leaq 32+a(%rip), %rax\n" " leaq 32+b(%rip), %rdx\n" " vpcmpgtd %ymm3, %ymm1, %ymm2\n" " vpblendvb %ymm2, %ymm1, %ymm0, %ymm0\n" " vmovdqa %ymm0, (%rsi)\n" " jmp .myL42\n" " .p2align 4,,10\n" " .p2align 3\n" ".myL56:\n" " vzeroupper\n" " ret\n" ".myL14:\n" " xorl %edx, %edx\n" " xorl %eax, %eax\n" " leaq a(%rip), %rsi\n" " jmp .myL3\n" " .cfi_endproc\n" ".myLFE9703:\n" " .size _Z2upi, .-_Z2upi\n" ); int main() { cin.tie(0) -> sync_with_stdio(false); int q; cin >> n >> q; Loop (i,0,n) { cin >> a[i] >> b[i]; b[i] ^= a[i]; } while (q--) { int t; cin >> t; up(t); } ll ans = 0; Loop (i,0,n) ans += a[i]; cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...