답안 #223949

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
223949 2020-04-16T22:22:37 Z MohamedAhmed04 케이크 (CEOI14_cake) C++17
83.3333 / 100
2000 ms 18940 KB
#include <bits/stdc++.h>
 
using namespace std ;
 
const int MAX = 3e5 + 10 ;
 
int arr[MAX] ;
int n , a ;
 
int tree[4 * MAX] ;
 
void build(int node , int l , int r)
{
	if(l == r)
	{
		tree[node] = arr[l] ;
		return ;
	}
	int mid = (l + r) >> 1 ;
	build(node << 1 , l , mid) ;
	build(node << 1 | 1 , mid+1 , r) ;
	tree[node] = max(tree[node << 1] , tree[node << 1 | 1]) ;
}
 
void update(int node , int l , int r , int idx , int val)
{
	if(idx > r || idx < l)
		return ;
	if(l == r)
	{
		tree[node] = val ;
		return ;
	}
	int mid = (l + r) >> 1 ;
	update(node << 1 , l , mid , idx , val) ;
	update(node << 1 | 1 , mid+1 , r , idx , val) ;
	tree[node] = max(tree[node << 1] , tree[node << 1 | 1]) ;
}
 
int query(int node , int l , int r , int from , int to)
{
	if(from > r || to < l)
		return 0ll ;
	if(l >= from && r <= to)
		return tree[node] ;
	int mid = (l + r) >> 1 ;
	int a = query(node << 1 , l , mid , from , to) ;
	int b = query(node << 1 | 1, mid+1 , r , from , to) ;
	return max(a , b) ;
}
 
int main()
{
	ios_base::sync_with_stdio(0) ;
	cin.tie(0) ;
	cin>>n>>a ;
	vector< pair<int , int> >vp ;
	for(int i = 1 ; i <= n ; ++i)
	{
		cin>>arr[i] ;
		vp.emplace_back(arr[i] , i) ;
	}
	sort(vp.begin() , vp.end()) ;
	for(int i = 0 ; i < n ; ++i)
		arr[vp[i].second] = i+1ll ;
	build(1 , 1 , n) ;
	set< pair<int , int> >s ;
	for(int i = 1 ; i <= n ; ++i)
		s.insert({arr[i] , i}) ;
	while(s.size() > 10)
		s.erase(s.begin()) ;
	int q ;
	cin>>q ;
	while(q--)
	{
		char c ;
		cin>>c ;
		if(c == 'E')
		{
			int x , y ;
			cin>>x>>y ;
			s.insert({arr[x] , x}) ;
			if(s.size() > 10)
			{
				s.erase({arr[x] , x}) ;
				s.erase(s.begin()) ;
			}
			else
				s.erase({arr[x] , x}) ;
			pair<int , int>p = *s.rbegin() ;
			int val = p.first ;
			for(int i = min(n , 10) ; i >= 1 ; --i)
			{
				val++ ;
				if(i == y)
				{
					arr[x] = val ;
					s.insert({arr[x] , x}) ;
					update(1 , 1 , n , x , arr[x]) ;
					continue ;
				}
				p = *s.begin() ;
				s.erase(p) ;
				arr[p.second] = val ;
				update(1 , 1 , n , p.second , arr[p.second]) ;
				s.insert({arr[p.second] , p.second}) ;
			}
			//arr[x] = val[n-y+1] ;
			//val[n-y+1]++ ;
			//update(1 , 1 , n , x , arr[x]) ;
		}
		else
		{
			int x ;
			cin>>x ;
			if(x == a)
			{
				cout<<0<<"\n" ;
				continue ;
			}
			int Max ;
			int l , r , ans = a ;
			if(x < a)
				Max = query(1 , 1 , n , x , a-1) , l = a+1 , r = n ;
			else
				Max = query(1 , 1 , n , a+1 , x) , l = 1 , r = a-1 ;
			while(l <= r)
			{
				int mid = (l + r) >> 1 ;
				int y ;
				if(mid > a)
					y = query(1 , 1 , n , a+1 , mid) ;
				else
					y = query(1 , 1 , n , mid , a-1) ;
				if(y < Max)
				{
					ans = mid ;
					if(mid > a)
						l = mid+1 ;
					else
						r = mid-1 ;
				}
				else
				{
					if(mid > a)
						r = mid-1 ;
					else
						l = mid+1 ;
				}
			}
			cout<<abs(x-a)+abs(ans-a)<<"\n" ;
		}
	}
	return 0 ;
}	
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Correct 14 ms 512 KB Output is correct
5 Correct 33 ms 1152 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1299 ms 1060 KB Output is correct
2 Correct 1207 ms 1144 KB Output is correct
3 Correct 1279 ms 1160 KB Output is correct
4 Correct 1191 ms 1024 KB Output is correct
5 Correct 1373 ms 2048 KB Output is correct
6 Correct 1271 ms 2048 KB Output is correct
7 Correct 1339 ms 2048 KB Output is correct
8 Correct 1240 ms 2168 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 465 ms 7920 KB Output is correct
2 Correct 302 ms 7788 KB Output is correct
3 Correct 315 ms 7752 KB Output is correct
4 Correct 4 ms 384 KB Output is correct
5 Correct 533 ms 17900 KB Output is correct
6 Correct 683 ms 17816 KB Output is correct
7 Correct 502 ms 17768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 125 ms 760 KB Output is correct
2 Correct 130 ms 768 KB Output is correct
3 Correct 277 ms 4084 KB Output is correct
4 Correct 247 ms 3960 KB Output is correct
5 Correct 292 ms 888 KB Output is correct
6 Correct 556 ms 5336 KB Output is correct
7 Correct 450 ms 1656 KB Output is correct
8 Correct 655 ms 7280 KB Output is correct
9 Correct 1870 ms 18940 KB Output is correct
10 Correct 966 ms 1760 KB Output is correct
11 Correct 1221 ms 3376 KB Output is correct
12 Correct 1819 ms 16052 KB Output is correct
13 Execution timed out 2090 ms 18744 KB Time limit exceeded