제출 #1340598

#제출 시각아이디문제언어결과실행 시간메모리
1340598lemiakDeda (COCI17_deda)C++20
140 / 140
74 ms9168 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,q;
const int maxn=200003;
const int INF=LONG_LONG_MAX;
vector <int> a(maxn);
vector <int> t(4*maxn,INF);
void update(int v, int tl, int tr, int pos, int new_val)
{	
    if(tl==tr)
	t[v]=new_val;
    else
    {
    	int tm=(tl+tr)/2;
	if(tm>=pos)
	    update(v*2,tl,tm,pos,new_val);
	else
	    update(v*2+1,tm+1,tr,pos,new_val);
	t[v]=min(t[v*2],t[v*2+1]);
    }
}
int sum(int v, int tl, int tr, int l, int r, int x)
{
	if(l>r || t[v]>x)
		return -1;
	if(tl==tr) return tl;
	int tm=(tl+tr)/2;
	int left = -1;
	if(l <= tm)
	    left = sum(v*2, tl, tm, l, min(r, tm), x);
	if(left != -1) return left;
	
	if(r > tm)
	    return sum(v*2+1, tm+1, tr, max(l, tm+1), r, x);
	
	return -1;
}
int32_t main()
{
	ios_base::sync_with_stdio(false);
		cin.tie(0);
	cin>>n>>q;
	while(q--)
	{
		char k;
		cin>>k;
		if(k=='M')
		{
			int a,b;
			cin>>a>>b;
			b--;
			update(1,0,n-1,b,a);
		}
		else
		{
			int a,b;
			cin>>a>>b;
			b--;
			int ans = sum(1,0,n-1,b,n-1,a);
		    	cout<<(ans==-1 ? -1 : ans+1)<<"\n";
		}
	}
	return 0;
}
 
#Verdict Execution timeMemoryGrader output
Fetching results...