| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1030579 | Gray | Monkey and Apple-trees (IZhO12_apple) | C++17 | 26 ms | 3184 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <functional>
#include <ios>
#include <iostream>
#include <map>
#include <ratio>
#include <set>
#include <string>
#include <vector>
#define ll long long
#define ull unsigned long long int
#define ld double
#define ln "\n"
#define ff first
#define ss second
using namespace std;
 
const ll inf=2e18;
 
void setio(string io=""){
	#ifndef LOCAL
	if (io.length()){
		freopen((io+".in").c_str(), "r", stdin);
		freopen((io+".out").c_str(), "w", stdout);
		return;
	}
	#endif
	ios_base::sync_with_stdio(0); cin.tie(nullptr);
}
 
struct Node{
	Node *left, *right;
	ll val, full;
	Node(){
		left=right=nullptr;
		val=full=0;
	}
	Node(ll _val, ll _full){
		left=right=nullptr;
		val=_val;
		full=_full;
	}
	void preprocess(ll tl, ll tr){
		ll tm = (tl+tr)/2;
		if (left and left->val!=(tm-tl+1)){
			left->val=(tm-tl+1);
		}
	}
	void update(ll tl, ll tr, ll l, ll r){
		if (full or l>r) return;
		else if (tl==l and tr==r){
			val=tr-tl+1;
			full=1;
		}else{
			ll tm = (tl+tr)/2;
			if (!left) left=new Node;
			left->update(tl, tm, l, min(r, tm));
			if (!right) right=new Node;
			right->update(tm+1, tr, max(tm+1, l), r);
			val=left->val+right->val;
		}
	}
	ll query(ll l, ll r, ll tl, ll tr){
		if (l>r) return 0;
		else if (l==tl and r==tr){
			return val;
		}else if (full) return r-l+1;
		else{
			ll tm = (tl+tr)/2;
			ll ans=0;
			// preprocess(tl, tr);
			if (left) ans+=left->query(l, min(r, tm), tl, tm);
			if (right) ans+=right->query(max(l, tm+1), r, tm+1, tr);
			return ans;
		}
	}
};
 
void solve(){
	Node tr;
	ll l=1, r=1e9;
	ll q; cin >> q;
	ll c=0;
	while (q--){
		ll t, x, y; cin >> t >> x >> y;
		if (t==1){
			c = tr.query(x+c, y+c, l, r);
			cout << c << ln;
		}else{
			tr.update(l, r, x+c, y+c);
		}
	}
}
 
int main(){
	setio();
	ll t=1;
	// cin >> t;
	while (t--) solve();
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
