社区讨论

暴力可过

P3293[SCOI2016] 美味参与者 5已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m1z0x444
此快照首次捕获于
2024/10/07 21:04
去年
此快照最后确认于
2025/11/04 17:40
4 个月前
查看原帖
如题,给暴力加了点小优化罢了。
CPP
#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;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...