Forwarded from OffCampus Jobs | OnCampus Jobs | Daily Jobs Updates | Lastest Jobs | All Jobs | CSE Jobs | Fresher Jobs โฅ (Dushyant)
For junior graphic designers for free lancing
Send ur portfolio to
mailto:spanigrahi@keyhole.co
Send ur portfolio to
mailto:spanigrahi@keyhole.co
Forwarded from OffCampus Jobs | OnCampus Jobs | Daily Jobs Updates | Lastest Jobs | All Jobs | CSE Jobs | Fresher Jobs โฅ (Dushyant)
Wipro WILP Hiring โ
YOP: 2023, 2024
โApplication Deadline : 30 Aug 2024 11:59 PMโ
Apply Link:
https://app.joinsuperset.com/join/#/signup/student/jobprofiles/c10ac320-3871-4fb2-9053-d8a58b52ea18
YOP: 2023, 2024
โApplication Deadline : 30 Aug 2024 11:59 PMโ
Apply Link:
https://app.joinsuperset.com/join/#/signup/student/jobprofiles/c10ac320-3871-4fb2-9053-d8a58b52ea18
def solve(priceList):
floors = len(priceList)
frequencies = len(priceList[0])
dp = [[0] * frequencies for _ in range(floors)]
for j in range(frequencies):
dp[0][j] = priceList[0][j]
for i in range(1, floors):
for j in range(frequencies):
min_cost = float('inf')
for k in range(frequencies):
if k != j:
min_cost = min(min_cost, dp[i-1][k])
dp[i][j] = priceList[i][j] + min_cost
return min(dp[-1])
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> tree;
vector<int> values;
long long total = 0;
void dfs(int node, int parent, vector<int>& path) {
path.push_back(values[node]);
if (path.size() % 2 == 1) {
vector<int> sorted_path = path;
sort(sorted_path.begin(), sorted_path.end());
int median = sorted_path[sorted_path.size() / 2];
total += median;
}
for (int neighbor : tree[node]) {
if (neighbor != parent) {
dfs(neighbor, node, path);
}
}
path.pop_back();
}
int main() {
int n;
cin >> n;
values.resize(n);
for (int i = 0; i < n; ++i) {
cin >> values[i];
}
tree.resize(n);
for (int i = 0; i < n - 1; ++i) {
int u, v;
cin >> u >> v;
--u; --v;
tree[u].push_back(v);
tree[v].push_back(u);
}
vector<int> path;
dfs(0, -1, path);
cout << total<< endl;
return 0;
}
//median path โ
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> tree;
vector<int> values;
long long total = 0;
void dfs(int node, int parent, vector<int>& path) {
path.push_back(values[node]);
if (path.size() % 2 == 1) {
vector<int> sorted_path = path;
sort(sorted_path.begin(), sorted_path.end());
int median = sorted_path[sorted_path.size() / 2];
total += median;
}
for (int neighbor : tree[node]) {
if (neighbor != parent) {
dfs(neighbor, node, path);
}
}
path.pop_back();
}
int main() {
int n;
cin >> n;
values.resize(n);
for (int i = 0; i < n; ++i) {
cin >> values[i];
}
tree.resize(n);
for (int i = 0; i < n - 1; ++i) {
int u, v;
cin >> u >> v;
--u; --v;
tree[u].push_back(v);
tree[v].push_back(u);
}
vector<int> path;
dfs(0, -1, path);
cout << total<< endl;
return 0;
}
//median path โ
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define endl "\n"
#define MOD 1000000007
#define MOD2 998244353
#define vll vector<ll>
struct SegmentTree {
ll N;
vll tree;
ll neutral = 0;
ll combine(ll a, ll b) {
return a + b;
}
void build(ll u, ll L, ll R, vll &v) {
if(L == R) {
tree[u] = v[L];
} else {
ll M = (L + R) / 2;
build(u * 2, L, M, v);
build(u * 2 + 1, M + 1, R, v);
tree[u] = combine(tree[u * 2], tree[u * 2 + 1]);
}
}
SegmentTree(vll v) {
N = v.size() - 1;
tree.assign(4 * N + 1, 0);
build(1, 1, N, v);
}
ll query(ll lq, ll rq, ll u, ll L, ll R) {
if(L > rq || R < lq) {
return neutral;
} else if(L >= lq && R <= rq) {
return tree[u];
} else {
ll M = (L + R) / 2;
return combine(query(lq, rq, u * 2, L, M), query(lq, rq, u * 2 + 1, M + 1, R));
}
}
void update(ll idx, ll val, ll u, ll L, ll R) {
if(L > idx || R < idx) {
return;
} else if(L == R) {
tree[u] = val;
return;
} else {
ll M = (L + R) / 2;
update(idx, val, u * 2, L, M);
update(idx, val, u * 2 + 1, M + 1, R);
tree[u] = combine(tree[u * 2], tree[u * 2 + 1]);
}
}
};
const int MAXN = 1e6 + 1;
vector<int> spf(MAXN);
void sieve() {
spf[1] = 1;
for (int i = 2; i < MAXN; i++)
spf[i] = i;
for (int i = 4; i < MAXN; i += 2)
spf[i] = 2;
for (int i = 3; i * i < MAXN; i++) {
if (spf[i] == i) {
for (int j = i * i; j < MAXN; j += i)
if (spf[j] == j)
spf[j] = i;
}
}
}
int32_t main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
sieve();
int n, q; cin >> n >> q;
vll arr(n + 1);
for(int i = 1; i <= n; i++) cin >> arr[i];
SegmentTree sgt(arr);
set<int> s;
for(int i = 1; i <= n; i++)
s.insert(i);
while(q--) {
int type; cin >> type;
int a, b; cin >> a >> b;
if(type == 3) {
sgt.update(a, b, 1, 1, n);
int temp = a;
auto it = s.lower_bound(temp);
if(it != s.end() and s.size() != 0 and *it == a) {
s.erase(temp);
s.insert(a);
} else {
s.insert(a);
}
arr[a] = b;
} else if (type == 2) {
cout << sgt.query(a, b, 1, 1, n) << endl;
} else {
while(a <= b) {
int temp = a;
auto it = s.lower_bound(temp);
if(it == s.end()) break;
if(*it > b) break;
int c = *it + 1;
sgt.update(a, arr[a] / spf[arr[a]], 1, 1, n);
if(spf[a] == 1) {
s.erase(temp);
}
arr[a] = spf[a];
a = c;
}
}
}
return 0;
}
Divisor queries โ
using namespace std;
#define int long long
#define ll long long
#define endl "\n"
#define MOD 1000000007
#define MOD2 998244353
#define vll vector<ll>
struct SegmentTree {
ll N;
vll tree;
ll neutral = 0;
ll combine(ll a, ll b) {
return a + b;
}
void build(ll u, ll L, ll R, vll &v) {
if(L == R) {
tree[u] = v[L];
} else {
ll M = (L + R) / 2;
build(u * 2, L, M, v);
build(u * 2 + 1, M + 1, R, v);
tree[u] = combine(tree[u * 2], tree[u * 2 + 1]);
}
}
SegmentTree(vll v) {
N = v.size() - 1;
tree.assign(4 * N + 1, 0);
build(1, 1, N, v);
}
ll query(ll lq, ll rq, ll u, ll L, ll R) {
if(L > rq || R < lq) {
return neutral;
} else if(L >= lq && R <= rq) {
return tree[u];
} else {
ll M = (L + R) / 2;
return combine(query(lq, rq, u * 2, L, M), query(lq, rq, u * 2 + 1, M + 1, R));
}
}
void update(ll idx, ll val, ll u, ll L, ll R) {
if(L > idx || R < idx) {
return;
} else if(L == R) {
tree[u] = val;
return;
} else {
ll M = (L + R) / 2;
update(idx, val, u * 2, L, M);
update(idx, val, u * 2 + 1, M + 1, R);
tree[u] = combine(tree[u * 2], tree[u * 2 + 1]);
}
}
};
const int MAXN = 1e6 + 1;
vector<int> spf(MAXN);
void sieve() {
spf[1] = 1;
for (int i = 2; i < MAXN; i++)
spf[i] = i;
for (int i = 4; i < MAXN; i += 2)
spf[i] = 2;
for (int i = 3; i * i < MAXN; i++) {
if (spf[i] == i) {
for (int j = i * i; j < MAXN; j += i)
if (spf[j] == j)
spf[j] = i;
}
}
}
int32_t main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
sieve();
int n, q; cin >> n >> q;
vll arr(n + 1);
for(int i = 1; i <= n; i++) cin >> arr[i];
SegmentTree sgt(arr);
set<int> s;
for(int i = 1; i <= n; i++)
s.insert(i);
while(q--) {
int type; cin >> type;
int a, b; cin >> a >> b;
if(type == 3) {
sgt.update(a, b, 1, 1, n);
int temp = a;
auto it = s.lower_bound(temp);
if(it != s.end() and s.size() != 0 and *it == a) {
s.erase(temp);
s.insert(a);
} else {
s.insert(a);
}
arr[a] = b;
} else if (type == 2) {
cout << sgt.query(a, b, 1, 1, n) << endl;
} else {
while(a <= b) {
int temp = a;
auto it = s.lower_bound(temp);
if(it == s.end()) break;
if(*it > b) break;
int c = *it + 1;
sgt.update(a, arr[a] / spf[arr[a]], 1, 1, n);
if(spf[a] == 1) {
s.erase(temp);
}
arr[a] = spf[a];
a = c;
}
}
}
return 0;
}
Divisor queries โ
int minimize_difference(int N, vector<int>& A, int K, vector<int>& operand) {
vector<vector<int>> possible_values(N);
for (int idx = 0; idx < N; ++idx) {
set<int> values;
for (int mask = 0; mask < (1 << K); ++mask) {
int new_value = A[idx];
for (int i = 0; i < K; ++i) {
if (mask & (1 << i)) {
new_value ^= operand[i];
}
}
values.insert(new_value);
}
possible_values[idx] = vector<int>(values.begin(), values.end());
sort(possible_values[idx].begin(), possible_values[idx].end());
}
vector<pair<int, int>> all_values;
for (int i = 0; i < N; ++i) {
for (int value : possible_values[i]) {
all_values.emplace_back(value, i);
}
}
sort(all_values.begin(), all_values.end());
map<int, int> count;
int left = 0;
int min_range = INT_MAX;
int distinct_count = 0;
for (int right = 0; right < all_values.size(); ++right) {
int value = all_values[right].first;
int index = all_values[right].second;
if (count[index] == 0) {
++distinct_count;
}
++count[index];
while (distinct_count == N) {
min_range = min(min_range, value - all_values[left].first);
int left_value = all_values[left].first;
int left_index = all_values[left].second;
--count[left_index];
if (count[left_index] == 0) {
--distinct_count;
}
++left;
}
}
return min_range;
}
Xor on Array โ
vector<vector<int>> possible_values(N);
for (int idx = 0; idx < N; ++idx) {
set<int> values;
for (int mask = 0; mask < (1 << K); ++mask) {
int new_value = A[idx];
for (int i = 0; i < K; ++i) {
if (mask & (1 << i)) {
new_value ^= operand[i];
}
}
values.insert(new_value);
}
possible_values[idx] = vector<int>(values.begin(), values.end());
sort(possible_values[idx].begin(), possible_values[idx].end());
}
vector<pair<int, int>> all_values;
for (int i = 0; i < N; ++i) {
for (int value : possible_values[i]) {
all_values.emplace_back(value, i);
}
}
sort(all_values.begin(), all_values.end());
map<int, int> count;
int left = 0;
int min_range = INT_MAX;
int distinct_count = 0;
for (int right = 0; right < all_values.size(); ++right) {
int value = all_values[right].first;
int index = all_values[right].second;
if (count[index] == 0) {
++distinct_count;
}
++count[index];
while (distinct_count == N) {
min_range = min(min_range, value - all_values[left].first);
int left_value = all_values[left].first;
int left_index = all_values[left].second;
--count[left_index];
if (count[left_index] == 0) {
--distinct_count;
}
++left;
}
}
return min_range;
}
Xor on Array โ
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
int minimize_difference(int N, vector<int>& A, int K, vector<int>& operand) { vector<vector<int>> possible_values(N); for (int idx = 0; idx < N; ++idx) { set<int> values; for (int mask = 0; mask < (1 << K); ++mask) { intโฆ
def getUnallottedUsers(bids, totalShares):Bny โ
sorted_bids = sorted(bids, key=lambda x: (-x[2], x[3]))
allocated_shares = {}
unallotted_users = set()
remaining_shares = totalShares
for user_id, shares, price, timestamp in sorted_bids:
if remaining_shares == 0:
unallotted_users.add(user_id)
continue
allocated = min(shares, remaining_shares)
allocated_shares[user_id] = allocated_shares.get(user_id, 0) + allocated
remaining_shares -= allocated
if allocated_shares[user_id] < shares:
unallotted_users.add(user_id)
fully_unallotted = [user_id for user_id, shares in allocated_shares.items() if shares == 0]
fully_unallotted.extend([bid[0] for bid in bids if bid[0] not in allocated_shares])
return sorted(set(fully_unallotted))
๐1
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
bool canAchieve(vector<int>& A, vector<int>& B, vector<int>& C, int mid, long long& cost) {
int N = A.size();
long long curCost = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
vector<int> curA = A;
for (int i = 0; i < N; ++i) {
if (curA[i] > mid) {
pq.push({C[i], i});
}
}
for (int i = 0; i < N; ++i) {
while (curA[i] < mid) {
if (pq.empty()) return false;
auto [costIdx, idx] = pq.top(); pq.pop();
if (curA[idx] <= mid || curA[idx] <= B[idx]) continue;
int move = min(mid - curA[i], curA[idx] - max(B[idx], mid));
curA[i] += move;
curA[idx] -= move;
curCost = (curCost + 1LL * move * costIdx) % MOD;
if (curA[idx] > mid) {
pq.push({C[idx], idx});
}
}
}
cost = curCost;
return true;
}
pair<int, long long> findMaxMin(vector<int>& A, vector<int>& B, vector<int>& C) {
int left = *min_element(B.begin(), B.end());
int right = *max_element(A.begin(), A.end());
int ans = left;
long long minCost = LLONG_MAX;
while (left <= right) {
int mid = left + (right - left) / 2;
long long cost = 0;
if (canAchieve(A, B, C, mid, cost)) {
ans = mid;
minCost = cost;
left = mid + 1;
} else {
right = mid - 1;
}
}
return {ans, minCost};
}
int main() {
int T;
cin >> T;
while (T--) {
int N;
cin >> N;
vector<int> A(N), B(N), C(N);
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
for (int i = 0; i < N; ++i) {
cin >> B[i];
}
for (int i = 0; i < N; ++i) {
cin >> C[i];
}
pair<int, long long> result = findMaxMin(A, B, C);
cout << "[" << result.first << ", " << result.second << "]" << endl;
}
return 0;
}
//queries and array โ
Source : Hola
using namespace std;
const int MOD = 1e9 + 7;
bool canAchieve(vector<int>& A, vector<int>& B, vector<int>& C, int mid, long long& cost) {
int N = A.size();
long long curCost = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
vector<int> curA = A;
for (int i = 0; i < N; ++i) {
if (curA[i] > mid) {
pq.push({C[i], i});
}
}
for (int i = 0; i < N; ++i) {
while (curA[i] < mid) {
if (pq.empty()) return false;
auto [costIdx, idx] = pq.top(); pq.pop();
if (curA[idx] <= mid || curA[idx] <= B[idx]) continue;
int move = min(mid - curA[i], curA[idx] - max(B[idx], mid));
curA[i] += move;
curA[idx] -= move;
curCost = (curCost + 1LL * move * costIdx) % MOD;
if (curA[idx] > mid) {
pq.push({C[idx], idx});
}
}
}
cost = curCost;
return true;
}
pair<int, long long> findMaxMin(vector<int>& A, vector<int>& B, vector<int>& C) {
int left = *min_element(B.begin(), B.end());
int right = *max_element(A.begin(), A.end());
int ans = left;
long long minCost = LLONG_MAX;
while (left <= right) {
int mid = left + (right - left) / 2;
long long cost = 0;
if (canAchieve(A, B, C, mid, cost)) {
ans = mid;
minCost = cost;
left = mid + 1;
} else {
right = mid - 1;
}
}
return {ans, minCost};
}
int main() {
int T;
cin >> T;
while (T--) {
int N;
cin >> N;
vector<int> A(N), B(N), C(N);
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
for (int i = 0; i < N; ++i) {
cin >> B[i];
}
for (int i = 0; i < N; ++i) {
cin >> C[i];
}
pair<int, long long> result = findMaxMin(A, B, C);
cout << "[" << result.first << ", " << result.second << "]" << endl;
}
return 0;
}
//queries and array โ
Source : Hola
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
const int MOD = 1e9 + 7;
class SegmentTree {
vector<int> tree;
vector<int> arr;
int size;
void build(int node, int start, int end) {
if (start == end) {
tree[node] = arr[start];
} else {
int mid = (start + end) / 2;
build(2 * node, start, mid);
build(2 * node + 1, mid + 1, end);
tree[node] = min(tree[2 * node], tree[2 * node + 1]);
}
}
int query(int node, int start, int end, int l, int r) {
if (r < start || l > end) return INT_MAX;
if (l <= start && end <= r) return tree[node];
int mid = (start + end) / 2;
return min(query(2 * node, start, mid, l, r), query(2 * node + 1, mid + 1, end, l, r));
}
public:
SegmentTree(const vector<int>& input) : arr(input), size(input.size()) {
tree.resize(4 * size);
build(1, 0, size - 1);
}
int query(int l, int r) {
return query(1, 0, size - 1, l, r);
}
};
long long maxProfitSubstring(const string& str, const vector<int>& values) {
int n = str.size();
vector<int> prefixSum(n + 1, 0);
for (int i = 0; i < n; ++i) {
prefixSum[i + 1] = prefixSum[i] + values[str[i] - 'a'];
}
vector<int> indexArray(n);
for (int i = 0; i < n; ++i) {
indexArray[i] = str[i] - 'a' + 1;
}
SegmentTree segTree(indexArray);
long long maxProfit = 0;
for (int start = 0; start < n; ++start) {
for (int end = start; end < n; ++end) {
int minIndex = segTree.query(start, end);
long long sum = prefixSum[end + 1] - prefixSum[start];
long long profit = sum * minIndex;
maxProfit = max(maxProfit, profit);
}
}
return maxProfit % MOD;
}
Maxium gain substring โ
The maximum strength โ
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include <bits/stdc++.h>
using namespace std;
vector<int> tree;
void update(int start, int end, int parent, long long index){
if (start > end) {
return;
}
if (start == end) {
tree[parent]++;
return;
}
int mid = (start + end) / 2;
if (index > mid) {
update(mid + 1, end, 2 * parent + 2, index);
}
else {
update(start, mid, 2 * parent + 1, index);
}
tree[parent] = tree[2 * parent + 1] + tree[2 * parent + 2];
}
int query(int start, int end, int parent, int qstart, int qend){
if (qstart > end || qend < start) {
return 0;
}
if (qstart <= start && qend >= end) {
return tree[parent];
}
int mid = (start + end) / 2;
int L = query(start, mid, 2 * parent + 1, qstart, qend);
int R = query(mid + 1, end, 2 * parent + 2, qstart, qend);
return L + R;
}
int solve(string &S){
int n = S.size();
tree.resize(4 * 2 * n + 1, 0);
int shift = n;
long long currSum = 0;
long long cnt = 0;
update(0, 2 * n, 0, 0 + shift);
for (int i = 0; i < n; i++) {
currSum += (S[i] == '1' ? 1 : -1);
int lessThan = (currSum + shift) - 1;
cnt += query(0, 2 * n, 0, 0, lessThan);
update(0, 2 * n, 0, currSum + shift);
}
return cnt;
}
More Ones โ
int t;
cin >> t;
while(t--){
int n;
const int mod = 1e9 + 7;
cin >> n;
string s;
cin >> s;
int dp[n+2];
int last1 = -1 , last0 = -1;
memset(dp,0,sizeof dp);
dp[0] = 1;
for(int i = 1;i<=n;i++){
int x = (s[i-1] - '0');
dp[i] = (dp[i-1] * 2)%mod;
if(x){
if(last1 != -1)
dp[i] -= dp[last1 - 1];
dp[i] = (dp[i] + mod)%mod;
last1 = i;
} else {
if(last0 != -1){
dp[i] -= dp[last0 - 1];
dp[i] = (dp[i] + mod)%mod;
} else {
dp[i] -= 1;
dp[i] = (dp[i] + mod)%mod;
}
last0 = i;
}
}
if(last0==-1)
{
dp[n] -= 1;
dp[n] += mod;
dp[n] %= mod;
}
cout << dp[n]<<endl;
}
Distinct subsequence โ
cin >> t;
while(t--){
int n;
const int mod = 1e9 + 7;
cin >> n;
string s;
cin >> s;
int dp[n+2];
int last1 = -1 , last0 = -1;
memset(dp,0,sizeof dp);
dp[0] = 1;
for(int i = 1;i<=n;i++){
int x = (s[i-1] - '0');
dp[i] = (dp[i-1] * 2)%mod;
if(x){
if(last1 != -1)
dp[i] -= dp[last1 - 1];
dp[i] = (dp[i] + mod)%mod;
last1 = i;
} else {
if(last0 != -1){
dp[i] -= dp[last0 - 1];
dp[i] = (dp[i] + mod)%mod;
} else {
dp[i] -= 1;
dp[i] = (dp[i] + mod)%mod;
}
last0 = i;
}
}
if(last0==-1)
{
dp[n] -= 1;
dp[n] += mod;
dp[n] %= mod;
}
cout << dp[n]<<endl;
}
Distinct subsequence โ
โค1
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
int minimize_difference(int N, vector<int>& A, int K, vector<int>& operand) { vector<vector<int>> possible_values(N); for (int idx = 0; idx < N; ++idx) { set<int> values; for (int mask = 0; mask < (1 << K); ++mask) { intโฆ
from itertools import product
from collections import defaultdict
def minimize_difference(N, A, K, operand):
possible_values = []
for a in A:
values = set()
for mask in range(1 << K):
new_value = a
for i in range(K):
if mask & (1 << i):
new_value ^= operand[i]
values.add(new_value)
possible_values.append(sorted(values))
all_values = []
for i, values in enumerate(possible_values):
for value in values:
all_values.append((value, i))
all_values.sort()
count = defaultdict(int)
left = 0
min_range = float('inf')
distinct_count = 0
for right, (value, i) in enumerate(all_values):
if count[i] == 0:
distinct_count += 1
count[i] += 1
while distinct_count == N:
min_range = min(min_range, all_values[right][0] - all_values[left][0])
left_value, left_index = all_values[left]
count[left_index] -= 1
if count[left_index] == 0:
distinct_count -= 1
left += 1
return min_range
Xor on Array โ
from collections import defaultdict
def minimize_difference(N, A, K, operand):
possible_values = []
for a in A:
values = set()
for mask in range(1 << K):
new_value = a
for i in range(K):
if mask & (1 << i):
new_value ^= operand[i]
values.add(new_value)
possible_values.append(sorted(values))
all_values = []
for i, values in enumerate(possible_values):
for value in values:
all_values.append((value, i))
all_values.sort()
count = defaultdict(int)
left = 0
min_range = float('inf')
distinct_count = 0
for right, (value, i) in enumerate(all_values):
if count[i] == 0:
distinct_count += 1
count[i] += 1
while distinct_count == N:
min_range = min(min_range, all_values[right][0] - all_values[left][0])
left_value, left_index = all_values[left]
count[left_index] -= 1
if count[left_index] == 0:
distinct_count -= 1
left += 1
return min_range
Xor on Array โ