이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);; cin.tie(NULL)
template<class T> struct Seg {
	const T ID = 1e18; T comb(T a, T b) { return min(a,b); }
	long long n; vector<T> seg;
	void init(long long _n) { n = _n; seg.assign(2*n,ID); }
	void pull(long long p) { seg[p] = comb(seg[2*p],seg[2*p+1]); }
	void upd(long long p, T val) {
        p += n;
		seg[p] = min(seg[p], val); for (p /= 2; p; p /= 2) pull(p); }
	T query(long long l, long long r) {
		T ra = ID, rb = ID;
		for (l += n, r += n+1; l < r; l /= 2, r /= 2) {
			if (l&1) ra = comb(ra,seg[l++]);
			if (r&1) rb = comb(seg[--r],rb);
		}
		return comb(ra,rb);
	}
};
int main() {
    int n, m;
    cin >> n >> m;
	vector<int> a(n), b(n), c(n);
	vector<long long> L(n), R(n), d(n);
	vector<int> total = {0, m-1};
	for(int i = 0; i < n; i++) {
		cin >> a[i] >> b[i] >> c[i] >> d[i];
		a[i]--;
        b[i]--;
        c[i]--;
		total.push_back(a[i]);
        total.push_back(b[i]);
        total.push_back(c[i]);
	}
	sort(total.begin(), total.end());
    total.erase(unique(total.begin(), total.end()), total.end());
	for(auto &x : a){
        x = lower_bound(total.begin(), total.end(), x) - total.begin();
    }
	for(auto &x : b){
        x = lower_bound(total.begin(), total.end(), x) - total.begin();
    }
	for(auto &x : c){
        x = lower_bound(total.begin(), total.end(), x) - total.begin();
    }
	int val = total.size();
	for(int t = 0; t < 2; t++) {
		Seg<long long> SegTree;
        SegTree.init(val);
		SegTree.upd(0, 0);
 		for(int i = 0; i < n; i++) {
 			L[i] = SegTree.query(a[i], b[i]) + d[i];
 			SegTree.upd(c[i], L[i]);
 			a[i] = val - 1 - a[i];
 			b[i] = val - 1 - b[i];
 			c[i] = val - 1 - c[i];
 			swap(a[i], b[i]);
 		}
 		L.swap(R);
	}
	long long ans = (long long)1e18 + 10;
	for(int i = 0; i < n; i++){
        ans = min(ans, L[i] + R[i] - d[i]);
    }
	cout << (ans == (long long)1e18 + 10 ? -1 : ans) << "\n";
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |