暴力可过
查看原帖
暴力可过
998707
spire001楼主2024/10/7 21:02

如题,给暴力加了点小优化罢了。

#pragma GCC target("avx,avx512vl,avx2")
#include <immintrin.h>
#include <algorithm>
#include <climits>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>

using namespace std;

constexpr int N = 2e5 + 100;
int n, T;

__m256i A[N >> 3];
int *a = (int*)A;

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);

  cin >> n >> T;

  for (int i = 0; i != n; i++)
    cin >> a[i];

  while (T--)
  {
    static int b, x, l, r;

    cin >> b >> x >> l >> r; l--;

    __m256i Ans = _mm256_set1_epi32(0);
    __m256i B = _mm256_set1_epi32(b);
    __m256i X = _mm256_set1_epi32(x);

    int ans = 0;
    while (l & 7 && l < r)
    {
      ans = max(ans, b ^ (a[l] + x));
      l++;
    }
    if (l == r)
    {
      cout << ans << '\n';
      continue;
    }
    while (r & 7)
    {
      r--;
      ans = max(ans, b ^ (a[r] + x));
    }
    if (l == r)
    {
      cout << ans << '\n';
      continue;
    }
    for ( l >>= 3, r >>= 3; l < r; l++)
      Ans = _mm256_max_epi32(Ans, _mm256_xor_si256(B, _mm256_add_epi32(A[l], X)));
    for (int i = 0; i != 4; i++)
      ans = max(ans, (int)max(Ans[i] >> 32, Ans[i] & 2147483647ll));
    cout << ans << '\n';
  }

  return 0;
}
2024/10/7 21:02
加载中...