Submission #638868

#TimeUsernameProblemLanguageResultExecution timeMemory
638868MohamedAhmed04Monkey and Apple-trees (IZhO12_apple)C++14
0 / 100
0 ms340 KiB
#include <bits/stdc++.h>

using namespace std ;

const int MAX = 5e5 + 10 ;

int arr[MAX] ;
int q ;

int tree[MAX * 30] , lazy[MAX * 30] ;
int lft[MAX * 30] , rht[MAX * 30] ;

int id = 1 ;

int Left(int node)
{
	if(!lft[node])
		lft[node] = ++id ;
	return lft[node] ;
}

int Right(int node)
{
	if(!rht[node])
		rht[node] = ++id ;
	return rht[node] ;
}

void update(int node , int l , int r , int from , int to , bool flag)
{
	if(from > r || to < l)
		return ;
	flag |= lazy[node] ;
	if(l >= from && r <= to)
	{
		tree[node] = r-l+1 , lazy[node] = 1 ;
		return ;
	}
	int mid = (l + r) >> 1 ;
	update(Left(node) , l , mid , from , to , flag) ;
	update(Right(node) , mid+1 , r , from , to , flag) ;
	tree[node] = tree[Left(node)] + tree[Right(node)] ;
	if(flag)
		tree[node] = r-l+1 ;
}

int query(int node , int l , int r , int from , int to , bool flag)
{
	if(from > r || to < l)
		return 0 ;
	flag |= lazy[node] ;
	if(l >= from && r <= to)
	{
		if(flag)
			return (r-l+1) ;
		else
			return tree[node] ;
	}
	int mid = (l + r) >> 1 ;
	int x = query(Left(node) , l , mid , from , to , flag) ;
	int y = query(Right(node) , mid+1 , r , from , to , flag) ;
	return (x + y) ;
}

int main()
{
	ios_base::sync_with_stdio(0) ;
	cin.tie(0) ;
	cin>>q ;
	long long cnt = 0 ;
	while(q--)
	{
		int ty ;
		long long l , r ;
		cin>>ty>>l>>r ;
		l += cnt , r += cnt ;
		if(ty == 1)
		{
			int ans = query(1 , 1 , 1e9 , l , r , 0) ;
			cnt += ans ;
			cout<<ans<<"\n" ;
		}
		else
			update(1 , 1 , 1e9 , l , r , 0) ;
	}
	return 0 ;
}		
#Verdict Execution timeMemoryGrader output
Fetching results...