求助,为什么WA
查看原帖
求助,为什么WA
1074696
tmlrock楼主2023/11/1 21:50
#include<bits/stdc++.h>
#pragma GCC target("avx,avx2")
#include<immintrin.h>
#include<xmmintrin.h>
#include<x86intrin.h>
#include<emmintrin.h>
using namespace std;
//#define addu32 _mm256_add_epu32
#define addi32 _mm256_add_epi32
__m256i a[100010];
int * b = (int*)a;
inline int solve(int l, int r) {
	register int ans = 0;
	if ((r - l) <= 128) {
		for (int i = l; i <= r; ++i)ans += b[i];
		return ans;
	}
	register int l2 = l >> 3;
	__m256i tmp = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 0, 0);
	ans += solve(l, ( (l & 7) ? (((l >> 3) + 1) << 3) : l ) - 1);
	for (; l2 <= (r >> 3); ++l2)tmp = addi32(tmp, a[l2]);
	ans += solve((l2 - 1) << 3, r);
	int * temp = (int*)(&tmp);
	ans += (temp[0] + temp[1] + temp[2] + temp[3]
	        + temp[4] + temp[5] + temp[6] + temp[7]);
	return ans;
}
int main() {
	int n, m;
	scanf("%d%d", &n, &m);
	for (register int i(0); i < n; ++i)scanf("%d", b + i);
	while (m--) {
		int opt;
		scanf("%d", &opt);
		int x, k;
		scanf("%d%d", &x, &k);
		--x;
		if (opt == 1) {
			b[x] += k;
		} else printf("%d\n", solve(x, k - 1));
	}
	return 0;
}
2023/11/1 21:50
加载中...