Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <immintrin.h>
- using namespace std;
- #define mp make_pair
- #define endl '\n'
- #define un unsigned
- #define all(a) begin(a), end(a)
- #define fastream ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
- typedef long long ll;
- typedef pair<int, int> pii;
- typedef pair<ll, ll> pll;
- typedef double db;
- typedef long double ldb;
- unsigned int SegMinSum(unsigned int *a, unsigned int *b, int n) {
- __m256i sumv = _mm256_set1_epi32(0);
- int i;
- for (i = 0; i < n - 8 + 1; i += 8) {
- __m256i seg = _mm256_lddqu_si256(reinterpret_cast<__m256i*>(a + i));
- seg = _mm256_min_epi32(seg, _mm256_lddqu_si256(reinterpret_cast<__m256i*>(b + i)));
- sumv = _mm256_add_epi32(sumv, seg);
- }
- int sum = 0;
- sum += _mm256_extract_epi32(sumv, 0);
- sum += _mm256_extract_epi32(sumv, 1);
- sum += _mm256_extract_epi32(sumv, 2);
- sum += _mm256_extract_epi32(sumv, 3);
- sum += _mm256_extract_epi32(sumv, 4);
- sum += _mm256_extract_epi32(sumv, 5);
- sum += _mm256_extract_epi32(sumv, 6);
- sum += _mm256_extract_epi32(sumv, 7);
- for (; i < n; i++) {
- sum += min(a[i], b[i]);
- }
- return sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement