# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
93462 | Aydarov03 | 원숭이와 사과 나무 (IZhO12_apple) | C++11 | 130 ms | 156920 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
vector <int> ans;
struct st
{
int l , r , val;
bool add;
st()
{
l = r = val = add = 0;
}
}tree[N * 100];
int cnt = 1;
void push( int v , int tl , int tr )
{
if(tree[v].add){
cout << tl << " - " << tr << endl;
if(tl != tr){
if(!tree[v].l) tree[v].l = ++ cnt;
if(!tree[v].r) tree[v].r = ++ cnt;
tree[ tree[v].l ].add = tree[ tree[v].r ].add = 1;
}
tree[v].val = tr - tl + 1;
}
}
void upd( int l , int r , int v = 1 , int tl = 1 , int tr = 1e9 )
{
push( v , tl , tr );
if( tl > r || l > tr )return;
if(l <= tl && tr <= r)
{
cout << "add - " << tl << " " << tr << endl;
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 );
tree[v].val = tree[ tree[v].l ].val + tree[ tree[v].r ].val;
}
int get( int l , int r , int v = 1 , int tl = 1 , int tr = 1e9)
{
push( v , tl , tr );
if( tl > r || tr < l )
return 0;
if( l <= tl && tr <= r )
{
return tree[v].val;
}
int tm = (tl + tr) >> 1;
return get( l , r , tree[v].l , tl , tm ) + get( l , r , tree[v].r , tm+1 , tr );
}
main()
{
upd(5, 8);
//upd(1, 5);
cout << get(1, 2) << endl;
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 )
{
cout << ( c = get( l , r ) ) << endl;
}
if( tp == 2 )
upd(l , r);
}
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |