Submission #1296537

#TimeUsernameProblemLanguageResultExecution timeMemory
1296537Ekber_EkberXORanges (eJOI19_xoranges)C++20
100 / 100
85 ms11232 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> #define GOOD_LUCK ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define int long long #define itn int #define endl "\n" #define ff first #define ss second #define pb push_back #define ppb pop_back #define ins insert #define lb lower_bound #define ub upper_bound #define bs binary_search #define count1 __builtin_popcount #define all(v) v.begin(), v.end() #define unset unordered_set #define unmap unordered_map #define pqueue priority_queue #define ordered_set_less tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> #define ordered_set_greater tree<int, null_type, greater<int>, rb_tree_tag, tree_order_statistics_node_update> using namespace std; using namespace __gnu_pbds; struct point{ }; int ctoi(char x) { return (int)x - '0'; } int sumab(int a, int b) { return (a + b) * (b - a + 1) / 2; } int gcd(int a, int b) { return (b == 0 ? a : gcd(b, a % b)); } int lcm(int a, int b) { return a / gcd(a, b) * b; } void print(vector <auto> &v) { for (const auto &i : v) cout << i << ' '; } void print_p(vector <pair<auto, auto>> &v) { for (const auto &i : v) cout << i.ff << ' ' << i.ss << endl; } int compress(int n, vector <int> &v) { vector <pair<int, int>> x(n); for (int i=0; i < n; i++) { x[i] = {v[i], i}; } sort(all(x)); int nxt=1; for (int i=0; i < n-1; i++) { if (x[i].ff == x[i+1].ff) { x[i].ff = nxt; } else x[i].ff = nxt++; } x[x.size()-1].ff = nxt; for (int i=0; i < n; i++) { swap(x[i].ff, x[i].ss); } sort(all(x)); for (int i=0; i < n; i++) { v[i] = x[i].ss; } return nxt; } int compress_p(int n, vector <pair<int, int>> &v) { vector <pair<int, int>> q; for (int i=0; i < n; i++) { q.pb({v[i].ff, i}); q.pb({v[i].ss, i}); } sort(all(q)); int nxt=0; for (int i=0; i < 2 * n - 1; i++) { if (q[i].ff == q[i+1].ff) q[i].ff = nxt; else q[i].ff = nxt++; } q.back().ff = nxt; for (auto &i : q) swap(i.ff, i.ss); sort(all(q)); for (int i=0; i < 2*n; i+=2) { v[i/2].ff = q[i].ss; v[i/2].ss = q[i+1].ss; } return nxt; } void timelimit() { int x = 1e+9; while (x--) x++; } void runtime() { int x = 1, y = 0; cout << x / y; } constexpr int MAX = 1e+5 + 3, INF = 2e+9, MOD = 1e+9 + 7, K = 18; int temp, temp1, temp2, temp3; struct SegmentTree { int n; vector <int> a, t; SegmentTree (int _n, vector <int>& v) { n = _n; t.assign(4*n, 0); a = v; } void merge(int &x, int &y, int &z) { x = (y ^ z); } void build(int v, int tl, int tr) { if (tl == tr) { t[v] = a[tl]; return; } int tm = (tl + tr) / 2; build(v*2, tl, tm); build(v*2+1, tm+1, tr); merge(t[v], t[v*2], t[v*2+1]); } int find(int v, int tl, int tr, int l, int r) { if (l > r) return 0; if (tl == l && tr == r) { return t[v]; } int tm = (tl + tr) / 2; int res1 = find(v*2, tl, tm, l, min(r, tm)); int res2 = find(v*2+1, tm+1, tr, max(l, tm+1), r); int res; merge(res, res1, res2); return res; } void update(int v, int tl, int tr, int i, int x) { if (tl == tr) { t[v] = x; a[tl] = x; return; } int tm = (tl + tr) / 2; if (i <= tm) { update(v*2, tl, tm, i, x); } else { update(v*2+1, tm+1, tr, i, x); } merge(t[v], t[v*2], t[v*2+1]); } int get(int l, int r) { return find(1, 0, n-1, l, r); } void upd(int i, int x) { update(1, 0, n-1, i, x); } }; void _() { int n, q; cin >> n >> q; vector <int> a, b; for (int i=1; i <= n; i++) { cin >> temp; if (i % 2) a.pb(temp); else b.pb(temp); } // for (int &i : a) cout << i << ' '; cout << endl; // for (int &i : b) cout << i << ' '; cout << endl; SegmentTree ta(a.size(), a), tb(b.size(), b); ta.build(1, 0, a.size()-1); tb.build(1, 0, b.size()-1); while (q--) { int d, x, y; cin >> d >> x >> y; if (d == 1) { --x; if (x % 2 == 0) { ta.upd(x / 2, y); } else { tb.upd(x / 2, y); } } else { int sz = y - x + 1; --x, --y; if (sz % 2 == 0) { cout << "0\n"; continue; } if (x % 2 == 0) { cout << ta.get(x/2, y/2); } else { cout << tb.get(x/2, y/2); } cout << endl; } } } signed main() { GOOD_LUCK // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); freopen("log.txt", "w", stderr); srand(time(0)); int tests=1; // cin >> tests; for (int i=1; i <= tests; i++) { // cout << "Case #" << i << ": "; _(); // cout << endl; } // int n; // while (cin >> n) { // _(n); // cout << endl; // } return 0; } // Problem X // by Ekber_Ekber /* */

Compilation message (stderr)

xoranges.cpp: In function 'int main()':
xoranges.cpp:220:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  220 |         freopen("log.txt", "w", stderr);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...