답안 #889079

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
889079 2023-12-18T18:52:24 Z shadow_sami 원숭이와 사과 나무 (IZhO12_apple) C++17
100 / 100
576 ms 261972 KB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef int ll;
typedef vector<ll> vi;
typedef vector<vector<ll>> vvi;
typedef pair<ll,ll> pi;
typedef map<ll,ll> mi;
typedef long double ld;
typedef vector<ld> vd;
typedef vector<vector<ld>> vvd;
typedef pair<ld,ld> pd;
#define ff first
#define ss second
#define srt(a) sort(a.begin(),a.end());
#define fip(k, n) for (ll i = k; i < n; i++)
#define fjp(k, n) for (ll j = k; j < n; j++)
#define fin(k, n) for (ll i = k; i >= n; i--)
#define fjn(k, n) for (ll j = k; j >= n; j--)
#define fp(k, n, m) for (ll k = n; k < m; k++)
#define fn(k, n, m) for (ll k = n; k >= m; k--)
#define ordered_set tree<pi, null_type,less< pi >, rb_tree_tag,tree_order_statistics_node_update>
#define totalOne(n) __builtin_popcount(n)
#define backZero(n) __builtin_ctzll(n)
#define frontZero(n) __builtin_clzll(n)
#define fx(k) for ( auto x : k )
#define test ll t;cin >> t;while (t--)
#define nli "\n"

// ==========================(debug)============================================================================================== //

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _printn(x); cerr << nli;
#else
#define debug(x)
#endif

void _printn(ll x){ cerr<<x<<" "; }
// void _printn(int x){ cerr<<x<<" "; }
void _printn(ld x){ cerr<<x<<" "; }
void _printn(double x){ cerr<<x<<" "; }
void _printn(string x){ cerr<<x<<" "; }
void _printn(char x){ cerr<<x<<" "; }
void _printn(bool x){ cerr<<x<<" "; }
template<class T,class V>void _printn(pair<T,V> vv);
template<class T> void _printn(vector<T> vv);
template<class T> void _printn(set<T> vv);
template<class T,class V> void _printn(map<T,V> vv);
template<class T> void _printn(multiset<T> vv);
template<class T,class V>void _printn(pair<T,V> vv){ cerr<<"( ";_printn(vv.ff);cerr<<",";_printn(vv.ss);cerr<<")";}
template<class T> void _printn(vector<T> vv){ cerr<<"[ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"]"; };
template<class T> void _printn(set<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T> void _printn(multiset<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T,class V> void _printn(map<T,V> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };

// ==========================(debug)============================================================================================== //

ll n,m,tp,tp2,res,cnt,sum,tptp,ans;
const ll mx = 5e5+5;
const ll mod = 1e9+7;

// ==========================(MOD)=============================================================================================== //

// ll mod_add(ll aa,ll bb){ return ((aa%mod)+(bb%mod))%mod; }
// ll mod_minus(ll aa,ll bb){ return (((aa%mod)-(bb%mod))+10*mod)%mod; }
// ll mod_mul(ll aa,ll bb){ return ((aa%mod)*(bb%mod))%mod; }
// ll mod_power(ll aa,ll bb){ aa%=mod; ll empowered = 1; bb%=mod-1; while(bb > 0){ if(bb & 1) empowered = mod_mul(empowered,aa); bb = bb >> 1; aa = mod_mul(aa,aa); } return empowered; }
// ll mod_divi(ll aa,ll bb){ aa=mod_mul(aa,mod_power(bb,mod-2)); return aa; }

// ==========================(MOD)=============================================================================================== //

bool f = false;
ll lim = 1e9;

typedef struct NODE{
	ll val = 0;
	ll laz = 0;
	NODE *left = NULL,*right = NULL;
	NODE(){
	}
	~NODE(){
		delete left;
		delete right;
	}
	void extend(){
		if(!left)
			left = new NODE{};
		if(!right)
			right = new NODE{};
	}
	ll query(ll l,ll r,ll st,ll en){
		if(laz){
			val = (r-l) + 1;
			if(l!=r){
				extend();
				left->laz += laz;
				right->laz += laz;
			}
			laz = 0;
		}
		if(r<st || l>en)
			return 0;
		if(l>=st && r<=en)
			return val;
		extend();
		ll mid = l + (r-l) / 2;
		return (left->query(l,mid,st,en) + right->query(mid+1,r,st,en));
	}
	void update(ll l,ll r,ll st,ll en){
		if(laz){
			val = (r-l) + 1;
			if(l!=r){
				extend();
				left->laz += laz;
				right->laz += laz;
			}
			laz = 0;
		}
		if(r<st || l>en)
			return ;
		if(l>=st && r<=en){
			if(val!=r-l+1)
				val = r-l+1;
			laz = 1;
			return ;
		}
		extend();
		// debug(left->l);
		// debug(left->r);
		// debug(right->l);
		// debug(right->r);
		ll mid = l + (r-l) / 2;
		left->update(l,mid,st,en);
		right->update(mid+1,r,st,en);
		val = (left->val + right->val);
		return;
	}
}node;

node sgt = NODE();
int sr,de;

int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    // #ifndef ONLINE_JUDGE
    //     freopen("input1.txt", "r", stdin);
    //     freopen("output1.txt", "w", stdout);
    //     freopen("error1.txt", "w", stderr);
    // #endif // ONLINE_JUDGE

    cnt = 0;
        cin>>m;
        tp = 0;
        while(m--){
        	cin>>tp2>>sr>>de;
        	if(tp2==1){
        		tp = sgt.query(1,lim,sr+tp,de+tp);
        		cout<<tp<<nli;
        	}else{
        		sgt.update(1,lim,sr+tp,de+tp);
        	}
        	// assert(cnt<=1e7);
        }
        // cout<<cnt<<nli;
        
    cerr << "Time elapsed: " << setprecision(6) << 1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 13 ms 5936 KB Output is correct
5 Correct 17 ms 7108 KB Output is correct
6 Correct 16 ms 6748 KB Output is correct
7 Correct 16 ms 7000 KB Output is correct
8 Correct 149 ms 51532 KB Output is correct
9 Correct 297 ms 87380 KB Output is correct
10 Correct 317 ms 98128 KB Output is correct
11 Correct 325 ms 106448 KB Output is correct
12 Correct 339 ms 110116 KB Output is correct
13 Correct 312 ms 137020 KB Output is correct
14 Correct 325 ms 138356 KB Output is correct
15 Correct 564 ms 253780 KB Output is correct
16 Correct 569 ms 255872 KB Output is correct
17 Correct 333 ms 144844 KB Output is correct
18 Correct 337 ms 144612 KB Output is correct
19 Correct 565 ms 261972 KB Output is correct
20 Correct 576 ms 261852 KB Output is correct