diff --git a/Others/3655.XOR-After-Range-Multiplication-Queries-II/3655.XOR-After-Range-Multiplication-Queries-II.cpp b/Others/3655.XOR-After-Range-Multiplication-Queries-II/3655.XOR-After-Range-Multiplication-Queries-II.cpp new file mode 100644 index 000000000..7fe8adba3 --- /dev/null +++ b/Others/3655.XOR-After-Range-Multiplication-Queries-II/3655.XOR-After-Range-Multiplication-Queries-II.cpp @@ -0,0 +1,65 @@ +using ll = long long; +class Solution { + int MOD = 1e9+7; +public: + long long power(long long base, long long exp) { + long long res = 1; + const int MOD = 1e9 + 7; + base %= MOD; + while (exp> 0) { + if (exp % 2 == 1) res = (res * base) % MOD; + base = (base * base) % MOD; + exp /= 2; + } + return res; + } + + long long modInverse(long long n) { + const int MOD = 1e9 + 7; + return power(n, MOD - 2); + } + + int xorAfterQueries(vector& nums, vector>& queries) { + int n = nums.size(); + const int B = 400; + + vectormultipliers(n,1); + + vector>small_k_queries[B+1]; + + for (auto q: queries) { + int l = q[0], r = q[1], k = q[2], v = q[3]; + if (k>B) { + for (int i=l; i<=r; i+=k) + multipliers[i] = (multipliers[i]*v) % MOD; + } else { + small_k_queries[k].push_back(q); + } + } + + for (int k=1; k<=b; k++) { + if (small_k_queries[k].empty()) + continue; + vectordiff(n+1,1); + for (auto& q: small_k_queries[k]) { + int l = q[0], r = q[1], v = q[3]; + r = (r-l)/k*k+l; + diff[l] = (diff[l]*v)%MOD; + if (r+k

AltStyle によって変換されたページ (->オリジナル) /