Pagini recente » Cod sursa (job #2464643) | Cod sursa (job #1130836) | Cod sursa (job #1177291) | Cod sursa (job #233063) | Cod sursa (job #2550371)
#include <iostream>
#include <queue>
using namespace std;
/*
ifstream fin("input.in");
ofstream fout("output.out");
*/
const int NMAX=100005, inf=10000000;
int v[NMAX],n,q;
int arb[NMAX*10];
struct INTERVAL{
int st, dr;
}interval[NMAX*10];
void citire()
{
cin>>n>>q;
for (int i=1; i<=n; i++)
cin>>v[i];
}
void creareArbore(int rad, int st, int dr)
{
if (st==dr){
interval[rad].st=st;
interval[rad].dr=dr;
arb[rad]=v[st];
}else{
interval[rad].st=st;
interval[rad].dr=dr;
int mij=(st+dr)/2;
creareArbore(2*rad,st,mij);
creareArbore(2*rad+1,mij+1,dr);
arb[rad]=min(arb[2*rad],arb[2*rad+1]);
}
}
void BFS(int rad)
{
queue<int>q;
int container;
q.push(rad);
while (!q.empty()){
container=q.front();
q.pop();
if (interval[container].st!=0){
cout<<interval[container].st<<' '<<interval[container].dr<<' '<<arb[container]<<'\n';
q.push(2*container);
q.push(2*container+1);
}
}
}
int query(int rad, int st, int dr)
{
if (interval[rad].st==0 || interval[rad].dr==0)
return inf;
if (interval[rad].dr<st || interval[rad].st>dr)
return inf;
if (interval[rad].st>=st && interval[rad].dr<=dr)
return arb[rad];
int mij=(st+dr)/2;
return min(query(2*rad,st,dr),query(2*rad+1,st,dr));
}
void update(int rad, int x, int val)
{
if (interval[rad].st==x && interval[rad].dr==x){
arb[rad]=val;
return;
}
int mij=(interval[rad].st+interval[rad].dr)/2;
if (interval[rad].st<=x && x<=mij){
update(2*rad,x,val);
arb[rad]=min(arb[rad*2],arb[2*rad+1]);
}else if (interval[rad].dr>=x && x>mij){
update(2*rad+1,x,val);
arb[rad]=min(arb[rad*2],arb[2*rad+1]);
}
return;
}
void rezolvare()
{
char c;
int x, y;
for (int i=1; i<=q; i++){
cin.get();
cin>>c;
cin>>x>>y;
if (c=='u'){
update(1,x,y);
v[x]=y;
}else{
cout<<query(1,x,y)<<'\n';
}
}
}
int main()
{
citire();
creareArbore(1,1,n);
rezolvare();
}