Submission #71865097


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
#define int ll
const ll INF = 1e10;

class SegmentTreeMx{
private:
  std::vector<int> aint;
  int n;
 
  int join(int x, int y) {
    return std::max(x, y);
  }
  
  void _update(int node, int from, int to, int x, int val) {
    if(from < to) {
      int mid = (from + to) / 2;
      if(x <= mid)
        _update(node * 2, from, mid, x, val);
      else
        _update(node * 2 + 1, mid + 1, to, x, val);
      aint[node] = join(aint[node * 2], aint[node * 2 + 1]);
    } else
      aint[node] = val;
  }
 
  int _query(int node, int from, int to, int x, int y) {
    if(from == x && to == y) {
      return aint[node];
    } else {
      int mid = (from + to) / 2;
      if(x <= mid && y <= mid)
        return _query(node * 2, from, mid, x, y);
      else if(mid + 1 <= x && mid + 1 <= y)
        return _query(node * 2 + 1, mid + 1, to, x, y);
      else
        return join(_query(node * 2, from, mid, x, mid),
                    _query(node * 2 + 1, mid + 1, to, mid + 1, y));
    }
  }
  
  void _print(int node, int from, int to) {
    if(from < to) {
      int mid = (from + to) / 2;
      _print(node * 2, from, mid);
      _print(node * 2 + 1, mid + 1, to);
    } else
      std::cout << aint[node] << " ";
  }
 
public:
  SegmentTreeMx(int n_) {
    n = n_;
    aint.resize(1 + 4 * n);
  }
  
  void update(int x, int val) {
    _update(1, 1, n, x, val);
  }
  
  int query(int x, int y) {
    return _query(1, 1, n, x, y);
  }
 
  void print() {
    std::cout << "Print array\n";
    _print(1, 1, n);
    std::cout << '\n';
  }
};

class SegmentTreeMn{
private:
  std::vector<int> aint;
  int n;
 
  int join(int x, int y) {
    return std::min(x, y);
  }
  
  void _update(int node, int from, int to, int x, int val) {
    if(from < to) {
      int mid = (from + to) / 2;
      if(x <= mid)
        _update(node * 2, from, mid, x, val);
      else
        _update(node * 2 + 1, mid + 1, to, x, val);
      aint[node] = join(aint[node * 2], aint[node * 2 + 1]);
    } else
      aint[node] = val;
  }
 
  int _query(int node, int from, int to, int x, int y) {
    if(from == x && to == y) {
      return aint[node];
    } else {
      int mid = (from + to) / 2;
      if(x <= mid && y <= mid)
        return _query(node * 2, from, mid, x, y);
      else if(mid + 1 <= x && mid + 1 <= y)
        return _query(node * 2 + 1, mid + 1, to, x, y);
      else
        return join(_query(node * 2, from, mid, x, mid),
                    _query(node * 2 + 1, mid + 1, to, mid + 1, y));
    }
  }
  
  void _print(int node, int from, int to) {
    if(from < to) {
      int mid = (from + to) / 2;
      _print(node * 2, from, mid);
      _print(node * 2 + 1, mid + 1, to);
    } else
      std::cout << aint[node] << " ";
  }
 
public:
  SegmentTreeMn(int n_) {
    n = n_;
    aint.resize(1 + 4 * n);
  }
  
  void update(int x, int val) {
    _update(1, 1, n, x, val);
  }
  
  int query(int x, int y) {
    return _query(1, 1, n, x, y);
  }
 
  void print() {
    std::cout << "Print array\n";
    _print(1, 1, n);
    std::cout << '\n';
  }
};

int32_t main(){
	ios::sync_with_stdio(0); cin.tie(0);
	int n, q;
    cin>>n>>q;

    ll x[n+5], y[n+5];
    SegmentTreeMx mxDif(n+5), mxAdd(n+5);
    SegmentTreeMn mnDif(n+5), mnAdd(n+5);
    for(int i=1; i<=n; i++){
        cin>>x[i]>>y[i];
        mxDif.update(i, x[i]-y[i]);
        mnDif.update(i, x[i]-y[i]);

        mxAdd.update(i, x[i]+y[i]);
        mnAdd.update(i, x[i]+y[i]);
    }

    while(q--){
        int type;
        cin>>type;

        if(type == 1){
            int idx;
            cin>>idx;

            cin>>x[idx]>>y[idx];
            mxDif.update(idx, x[idx]-y[idx]);
            mnDif.update(idx, x[idx]-y[idx]);

            mxAdd.update(idx, x[idx]+y[idx]);
            mnAdd.update(idx, x[idx]+y[idx]);
        }
        else{
            ll l, r, x, y;
            cin>>l>>r>>x>>y;

            ll dif = x-y;
            ll add = x+y;

            ll ans = -INF;
            // cout<<mxDif.query(l, r)<<' '<<mnDif.query(l, r)<<endl;
            // cout<<mxAdd.query(l, r)<<' '<<mnAdd.query(l, r)<<endl;
            ans = max(ans, abs(mxDif.query(l, r) - dif));
            ans = max(ans, abs(mnDif.query(l, r) - dif));
            ans = max(ans, abs(mxAdd.query(l, r) - add));
            ans = max(ans, abs(mnAdd.query(l, r) - add));
            cout<<ans<<endl;
        }
    }
	return 0;
}

Submission Info

Submission Time
Task F - Manhattan Christmas Tree 2
User takeonicky
Language C++23 (GCC 15.2.0)
Score 500
Code Size 4653 Byte
Status AC
Exec Time 333 ms
Memory 31456 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 2
AC × 24
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3552 KiB
00_sample_01.txt AC 1 ms 3540 KiB
01_random_00.txt AC 302 ms 31360 KiB
01_random_01.txt AC 316 ms 31360 KiB
01_random_02.txt AC 322 ms 31392 KiB
01_random_03.txt AC 329 ms 31276 KiB
01_random_04.txt AC 333 ms 31392 KiB
01_random_05.txt AC 333 ms 31356 KiB
01_random_06.txt AC 330 ms 31288 KiB
01_random_07.txt AC 332 ms 31356 KiB
01_random_08.txt AC 330 ms 31364 KiB
01_random_09.txt AC 333 ms 31316 KiB
01_random_10.txt AC 245 ms 31276 KiB
01_random_11.txt AC 245 ms 31356 KiB
01_random_12.txt AC 245 ms 31356 KiB
01_random_13.txt AC 244 ms 31360 KiB
01_random_14.txt AC 245 ms 31392 KiB
01_random_15.txt AC 42 ms 3540 KiB
01_random_16.txt AC 145 ms 31456 KiB
01_random_17.txt AC 261 ms 31432 KiB
01_random_18.txt AC 261 ms 31356 KiB
01_random_19.txt AC 260 ms 31392 KiB
01_random_20.txt AC 259 ms 31400 KiB
01_random_21.txt AC 257 ms 31352 KiB