Submission #472078

#TimeUsernameProblemLanguageResultExecution timeMemory
472078disastah원숭이와 사과 나무 (IZhO12_apple)C++17
100 / 100
477 ms134392 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#define ar array
using namespace std;
typedef long double ld;
typedef long long ll;
const int inf=1e9+9;
const ll linf=4e18+18;
const int N=1e9;

struct segtr {
	struct node {
		int x=0, l=-1, r=-1;
		bool lz=0;
		node() {}
	};
	vector<node> t;
	int N;
	segtr(int n): N(n) {
		t={{}};
	}
	void push(int v, int l, int r) {
		if (l+1<r) {
			if (t[v].l==-1) {
				t[v].l=t.size();
				t.push_back({});
			}
			if (t[v].r==-1) {
				t[v].r=t.size();
				t.push_back({});
			}
		}
		if (!t[v].lz) return;
		t[v].x=r-l;
		if (l+1<r) t[t[v].l].lz=t[t[v].r].lz=1;
		t[v].lz=0;
	}
	void upd(int v, int tl, int tr, int l, int r) {
		push(v,tl,tr);
		if (l>=r) return;
		if (tl==l&&tr==r) {
			t[v].lz=1, push(v,l,r);
		}
		else {
			int tm=(tl+tr)/2;
			upd(t[v].l,tl,tm,l,min(r,tm));
			upd(t[v].r,tm,tr,max(l,tm),r);
			t[v].x=t[t[v].l].x+t[t[v].r].x;
		}
	} void upd(int l, int r) {upd(0,0,N,l,r);}
	int sum(int v, int tl, int tr, int l, int r) {
		push(v,tl,tr);
		if (l>=r) return 0;
		if (tl==l&&tr==r) return t[v].x;
		int tm=(tl+tr)/2;
		return sum(t[v].l,tl,tm,l,min(r,tm))+sum(t[v].r,tm,tr,max(l,tm),r);
	} int sum(int l, int r) {return sum(0,0,N,l,r);}
};

int q;

void solve() {
	cin >> q;
	int C=0;
	segtr tr(N);
	while(q--) {
		int t, l, r; cin >> t >> l >> r; --l;
		if (t==1) {
			C=tr.sum(l+C,r+C);
			cout << C << "\n";
		}
		else tr.upd(l+C,r+C);
	}
}

signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
#ifdef disastah
	cout << "Output\n\n";
#endif
/*#ifndef disastah
	freopen("snowcow.in","r",stdin);
	freopen("snowcow.out","w",stdout);
#endif*/
	int tt=1;
//	cin >> tt;
	while (tt--) {
		solve();
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...