제출 #1332052

#제출 시각아이디문제언어결과실행 시간메모리
1332052onisDeda (COCI17_deda)C++20
80 / 140
229 ms5364 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int INF=1000000005;

int m[500005],n;

void upd(int i, int l, int r, int p, int v) {
	if (l==r) m[i]=v;
	else {
		int mid=(l+r)/2;
		if (p<=mid) upd(i*2,l,mid,p,v);
		else upd(i*2+1,mid+1,r,p,v);
		m[i]=min(m[i*2],m[i*2+1]);
	}
}
pair<int,int> find(int i, int l, int r, int x, int ll) {
	if (l==r) return {l,m[i]};
	int mid=(l+r)/2;
	pair<int,int> a={-1,INF};
	if (mid>=ll && m[i*2]<=x) a=find(i*2,l,mid,x,ll);
	if (a.second<=x) return a; 
	if (m[i*2+1]<=x) return find(i*2+1,mid+1,r,x,ll);
//	if (b.second<=x) return b;
	return {-1,INF};
}


signed main() {
	int q;
	cin>>n>>q;
	for (int i=0; i<500005; i++) m[i]=INF;
	while (q) {
		char a;
		int b,c;
		cin>>a>>b>>c;
		if (a=='M') {
			upd(1,1,n,c,b);
		} else {
			cout<<find(1,1,n,b,c).first<<endl;
		}
		q--;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...