제출 #710150

#제출 시각아이디문제언어결과실행 시간메모리
710150FoxyyBitaro, who Leaps through Time (JOI19_timeleap)C++17
4 / 100
3038 ms8488 KiB
/*****************/
/* [o] Subtask 1 */
/* [ ] Subtask 2 */
/* [ ] Subtask 3 */
/*****************/

#include <bits/stdc++.h>
using namespace std;

#define Foxyy cin.tie(0); cout.sync_with_stdio(0);
#define ll long long

struct Solver {
	int n;
	int q;
	vector<int>& l;
	vector<int>& r;
	
	void modify(int p, int s, int e) {
		l[p] = s;
		r[p] = e;
	}
	
	void query(int a, int b, int c, int d) {
		int t = b;
		ll ans = 0;
		if (c >= a) { 
			for (int i = a; i < c; i++) {
				t = max(t, l[i]);
				t++;
				if (t > r[i]) {
					ans += t-r[i];
					t = r[i];
				}
			}
			ans += max(t - d, 0);
			cout << ans << '\n';
		} else {
			for (int i = a-1; i >= c; i--) {
				t = max(t, l[i]);
				t++;
				if (t > r[i]) {
					ans += t-r[i];
					t = r[i];
				}
			}
			ans += max(t - d, 0);
			cout << ans << '\n';
		}
	}
	
	void solve() {
		while (q--) {
			int t;
			cin >> t;
			if (t == 1) {
				int p, s, e;
				cin >> p >> s >> e;
				p--;
				modify(p, s, e);
			} else {
				int a, b, c, d;
				cin >> a >> b >> c >> d;
				a--, c--;
				query(a, b, c, d);
			}
		}
	}
};

signed main() {
	Foxyy
	
	int T = 1;
//	cin >> T;
	while (T--) {
		int n, q;
		cin >> n >> q;
		vector<int> l(n-1), r(n-1);
		for (int i = 0; i < n-1; i++) {
			cin >> l[i] >> r[i];	
		}
		
		Solver solver{n, q, l, r};
		solver.solve();
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...