| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 93449 | Aydarov03 | Monkey and Apple-trees (IZhO12_apple) | C++14 | 62 ms | 56936 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
vector <int> ans;
struct st
{
		int l , r , val;
		bool add;
		st()
		{
			l = r = val = add = 0;
		}
}tree[N * 36];
int cnt = 1;
void push( int v , int tl , int tr )
{
		if( !tree[v].l )tree[v].l = ++cnt;
		if( !tree[v].r )tree[v].r = ++cnt;
	
		if( !tree[v].add || tree[v].val )return;
		
		tree[v].val = tr - tl + 1;
		tree[v].add = 0;
		
		if( tl != tr )
		tree[ tree[v].l ].add = tree[ tree[v].r ].add = 1;
}
void upd( int l , int r , int v = 1 , int tl = 1 , int tr = N )
{
		push( v , tl , tr );
		if( tl > r || l > tr )return;
		
		if(l <= tl && tr <= r)
		{
				tree[v].add = 1;
				push( v , tl , tr );
				return;
		}
		
		int tm = (tl + tr) >> 1;
		
		upd( l , r , tree[v].l , tl , tm );
		upd( l , r , tree[v].r , tm+1 , tr );
}
int get( int l , int r , int v = 1 , int tl = 1 , int tr = N )
{
	push( v , tl , tr );
	
	if( tl > r || tr < l )
		return 0;
	if( l <= tl && tr <= r )
	{
		if( tree[v].val )
		return tree[v].val;
	}
	
	if(tl == tr && !tree[v].val )return 0;
	
	int tm = (tl + tr) >> 1;
	
	return get( l , r , tree[v].l , tl , tm ) + get( l , r , tree[v].r , tm+1 , tr );
}
main()
{
	int t , c = 0;
	cin >> t;
	
	while( t-- )
	{
		int tp , l , r;
		scanf("%d%d%d" , &tp , &l , &r );
		
		l += c , r += c;
		
		if( tp == 1 )
		{
			ans.push_back( c = get( l , r ) );
		}
		
		if( tp == 2 )
			upd(l , r);
	}
	
	for(auto c : ans)cout << c << endl;
	
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
