This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |