Cod sursa(job #3227418)

Utilizator mmocanuMocanu Mihai-Adrian mmocanu Data 30 aprilie 2024 11:10:48
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define MAXN 200005
#define INFI ((int)1e9+9)
using namespace std;

int aint[MAXN*4];
int poz[MAXN];

void Init(int x,int y,int poz){
  int mij;

  if(x==y){
    aint[poz]=INFI;
    return;
  }
  mij=(x+y)/2;
  Init(x    ,mij,poz*2  );
  Init(mij+1,y  ,poz*2+1);

  aint[poz]=min(aint[poz*2],aint[poz*2+1]);
}


void Update(int x,int y,int i,int val,int poz){
  int mij;

  if(y<i || i<x){
    return;
  }

  if(i==x && y==i){
    aint[poz]=val;
    return;
  }

  mij=(x+y)/2;
  Update(x    ,mij,i,val,poz*2  );
  Update(mij+1,y  ,i,val,poz*2+1);

  aint[poz]=min(aint[poz*2],aint[poz*2+1]);
}

int main(){
  int n,i,t,val,k,poz;
  FILE *fin,*fout;
  fin=fopen("heapuri.in","r");
  fout=fopen("heapuri.out","w");
  fscanf(fin,"%d",&n);

  k=1;
  Init(1,n,1);
  for(i=0;i<n;i++){
    fscanf(fin,"%d",&t);

    if(t==1){
      fscanf(fin,"%d",&val);
      Update(1,n,k,val,1);
      k++;
    }else{
      if(t==2){
        fscanf(fin,"%d",&poz);
        Update(1,n,poz,INFI,1);
      }else{
        fprintf(fout,"%d\n",aint[1]);
      }
    }
  }

  fclose(fin);
  fclose(fout);
  return 0;
}