Submission #1332954

#TimeUsernameProblemLanguageResultExecution timeMemory
1332954ninstroyerDeda (COCI17_deda)C++20
140 / 140
60 ms4216 KiB
#include<bits/stdc++.h>
using namespace std;

const int nx = 2e5+5, inf = 2e9;

int n,q,a[nx];

struct segtree
{
	int mn[nx*4];
	void init(int l, int r, int i)
	{
		if(l==r) return mn[i]=a[l], void();
		int md = (l+r)/2;
		init(l,md,i*2);
		init(md+1,r,i*2+1);
		mn[i] = min(mn[i*2],mn[i*2+1]);
	}
	void update(int l, int r, int i, int idx, int val)
	{
		if(l==r) return mn[i]=val, void();
		int md = (l+r)/2;
		if(idx <= md) update(l,md,i*2,idx,val);
		else update(md+1,r,i*2+1,idx,val);
		mn[i] = min(mn[i*2],mn[i*2+1]);
	}
	int query(int l, int r, int i, int b, int y)
	{
		if(r < b || mn[i] > y) return -1;
		if(l==r) return l;
		int md = (l+r)/2;
		int left = query(l,md,i*2,b,y);
		if(left!=-1) return left;
		else return query(md+1,r,i*2+1,b,y);
	}
} s;

int main()
{
	ios::sync_with_stdio(false); cin.tie(0);
	cin>>n>>q;
	for(int i = 1; i <= n; i++) a[i] = inf;
	s.init(1,n,1);
	while(q--)
	{
		char t; cin>>t;
		int u,v; cin>>u>>v;
		if(t=='M') a[v]=u, s.update(1,n,1,v,u);
		else
		{
			int res = s.query(1,n,1,v,u);
			cout<<res<<'\n';
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...