Submission #84018

#TimeUsernameProblemLanguageResultExecution timeMemory
84018samsDeda (COCI17_deda)C++14
140 / 140
214 ms18372 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN=2e5+10, INF=0x3f3f3f3f;

int n, q;
int seg[4*MAXN];

// Segment Tree 

void upd(int i, int x, int u=1, int l=1, int r=n){

	if(l==r){
		seg[u]=x;
		return;
	}

	int mid=(l+r)/2;

	if(i<=mid) upd(i, x, 2*u, l, mid);
	else upd(i, x, 2*u+1, mid+1, r);

	seg[u]=min(seg[2*u], seg[2*u+1]);
}

int search_seg(int b, int x, int u=1, int l=1, int r=n){
	
	if(seg[u]>x) return INF;

	if(b>r) return INF;

	if(l==r) return l;

	int mid=(l+r)/2;

	if(l<b) return min(search_seg(b, x, 2*u, l, mid), search_seg(b, x, 2*u+1, mid+1, r));

	if(seg[2*u]<=x) return search_seg(b, x, 2*u, l, mid);

	return search_seg(b, x, 2*u+1, mid+1, r);
}

int main(){
	
	scanf("%d%d", &n, &q);
	memset(seg, INF, sizeof seg);
	for(int i=0;i<q;++i){

		char c;
		int x, a;

		scanf(" %c %d %d", &c, &x, &a);

		if(c=='M'){
			upd(a, x);
			/*cout << i << "\n";
			for(int j=1;j<=10;++j){
				cout << " i: " << j << " " << seg[j] << "\n";
			}
			*/
		}else{
			//cout << i << "\n";
			int k=search_seg(a, x);
			//cout << " aaaa " << seg[1] << " essa porra ta errada\n" <<"\n";
			if(k>=INF) printf("-1\n");
			else printf("%d\n", k);
		}
	}

	return 0;
}

Compilation message (stderr)

deda.cpp: In function 'int main()':
deda.cpp:46:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &q);
  ~~~~~^~~~~~~~~~~~~~~~
deda.cpp:53:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c %d %d", &c, &x, &a);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...