Pagini recente » Cod sursa (job #1195008) | Cod sursa (job #87850) | Cod sursa (job #2201888) | Cod sursa (job #1109979) | Cod sursa (job #2568568)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int val,poz;
int v[200002];
int partea;
long long sum[200001];
void actualizare(int nod,int st,int dr){
if(st==dr){
if(partea==0){
sum[nod]=val;v[nod]=val;
}
else if(partea==1){
int valoare=v[nod]-val;
sum[nod]=valoare;v[nod]=valoare;
}
}
else{
int mij=(st+dr)/2;
if(poz<=mij)actualizare(nod*2,st,mij);
else actualizare(nod*2+1,mij+1,dr);
v[nod]=max(v[nod*2],v[nod*2+1]);
sum[nod]=sum[nod*2]+sum[nod*2+1];
//cout<<nod<<" "<<sum[nod]<<endl;
}
}
int a,b,rez;
int nodord;
int sumaint;
void intreaba(int nod,int st,int dr){
// if(st==dr&&a<=st&&st<=b)cout<<v[nod]<<" ";
if(a<=st&&dr<=b) {//cout<<nod<<" "<<sum[nod]<<".. ";
if(rez<v[nod])rez=v[nod];
sumaint+=sum[nod];
}
else{
int mij=(st+dr)/2;
if(a<=mij)intreaba(nod*2,st,mij);
if(mij<b)intreaba(2*nod+1,mij+1,dr);
}
}
int n,m;
int main()
{
in>>n;
for(int i=1;i<=n;i++)
{
int x;
in>>x;
val=x;
poz=i;
actualizare(1,1,n);
//cout<<sum[1]<<" ";
//cout<<"///////////"<<endl;
}
//for(int i=1;i<=25;i++)cout<<sum[i]<<" ";
// cout<<endl<<endl;
partea++;
in>>m;
for(int i=1;i<=m;i++){
int q;
in>>q;
if(q==0){
in>>poz>>val;
actualizare(1,1,n);
//for(int ii=1;ii<=25;ii++)cout<<sum[ii]<<" ";cout<<endl<<endl;
}
if(q==1){
in>>a>>b;
rez=0;
sumaint=0;
intreaba(1,1,n);
// cout<<af<<endl;
// cout<<rez<<" / "<<" "<<sumaint;cout<<endl<<endl;
out<<sumaint<<'\n';
}
}
return 0;
}