| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 90319 | Aydarov03 | Monkey and Apple-trees (IZhO12_apple) | C++14 | 470 ms | 156156 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <stdio.h>
using namespace std;
const int N = 1e7 + 7;
	
int tree[N*5];
bool add[N*5];
int c;
void push( int tl , int tr , int v )
{
	if( !add[v] || tree[v] )return;
	
		tree[v] = ( tr - tl + 1 );
		add[v] = 0;
	
		if( tl != tr )
		add[v+v] = add[v+v+1] = 1;
}
	
void upd( int l , int r , int v = 1 , int tl = 1 , int tr = N )
{
	push( tl , tr , v );
	
	if( tl > r || tr < l )return;
	
	if( l <= tl && tr <= r )
	{
		add[v] = 1;
		push( tl , tr , v);
		return;
	}
	
	int mid = ( tl + tr ) / 2;
	
	upd( l , r , v + v , tl , mid );
	upd( l , r , v+v+1 , mid+1 , tr );
}
int get( int l , int r , int v = 1 , int tl = 1 , int tr = N )
{
	push( tl , tr , v );
	
	if( tl > r || tr < l )
		return 0;
	if( l <= tl && tr <= r )
	{
		if( tree[v] )
		return tree[v];
	}
	
	if(tl == tr && !tree[v] )return 0;
	
	int mid = tl + tr >> 1;
	
	return get( l , r , v + v , tl , mid ) + get( l , r , v+v+1 , mid+1 , tr );
}
main()
{
	int t;
	scanf("%d" , &t);
	
	while( t-- )
	{
		int d , l , r;
		scanf("%d%d%d" , &d , &l , &r);
		
		l += c , r  += c;
		
		if( d == 2 )
		{
			upd( l , r );
		}
		else
		{
			c = get( l , r );
			printf("%d\n" , c);
		}
	}
	
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
