Cod sursa(job #2902457)

Utilizator Rares_StefanoiuRares Stefanoiu Rares_Stefanoiu Data 16 mai 2022 14:20:54
Problema Arbori de intervale Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include<iostream>
#include<fstream>
using namespace std;
int n, m, i, x, arb[400000], a, b, maxim1;

void adaug(int nod,int st, int dr,int poz) {
	if (st == dr)
	{
		arb[nod] = x;
		return;
	}
	int mid = (st + dr) / 2;
	if (poz <= mid)
		adaug(nod*2,st, mid,poz);
	else
		adaug(nod*2+1,mid+1, dr,poz);
	arb[nod] = max(arb[2 * nod + 1], arb[2 * nod]);


}

 void maxim(int nod, int st, int dr) {
	 if (a <= st and b >= dr)
	 {
		 maxim1 = max(maxim1, arb[nod]);
		 return;
	 }
	 

		 int mid = (st + dr) / 2;
		 if (a <= mid)
			 maxim(2 * nod, st, mid);
		 if (b > mid)
			 maxim(2 * nod + 1, mid + 1, dr);
	 
	
}

		int main() {
			ifstream f("arbint.in");
			ofstream g("arbint.out");
			f >> n >> m;
			for (i = 1; i <= n; i++)
			{
				f >> x;
				adaug(1, 1, n, i);
			}
			for (i = 1; i <= m; i++)
			{
				f >> x;
				if (x == 1)
				{
					f >> a >> x;
					adaug(1, 1, n , a);
				}
				if (x == 0)
				{
					f >> a >> b;
					maxim1 = 0;
					maxim(1, 1, n);
					g << maxim1 << "\n";
				}

			}
			return 0;
		}