Pagini recente » Cod sursa (job #88485) | Cod sursa (job #1379588) | Cod sursa (job #2050506) | Cod sursa (job #2812521) | Cod sursa (job #2902294)
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize ("unroll-loops")
#include <fstream>
#define s 100001
#define arbs 400004
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
long long n,m,op,v[s];
struct nod{
long long lower,upper,mx,nr;
};
nod arb[arbs];
void create_nod(long long st,long long dr,long long nr)
{
if(st == dr) {
if(nr == 0 || nr != arb[nr].nr)
arb[nr].mx = v[dr];
arb[nr].lower = st;
arb[nr].upper = st;
arb[nr].nr = nr;
return;
}
else
{
long long mij = (st+dr)/2;
create_nod(st,mij,2*nr+1);
create_nod(mij+1,dr,2*nr+2);
arb[nr].mx = arb[2*nr+1].mx+arb[2*nr+2].mx;
arb[nr].lower = arb[2*nr+1].lower;
arb[nr].upper = arb[2*nr+2].upper;
arb[nr].nr = nr;
}
}
long long maxim(long long i,long long j,long long nr)
{
if(j<arb[nr].lower || i> arb[nr].upper)
return 0;
if(i<= arb[nr].lower && j>= arb[nr].upper)
return arb[nr].mx;
return (maxim(i,j,nr*2+1) + maxim(i,j,nr*2+2));
}
void update(long long a,long long b,long long nr) {
if(a<arb[nr].lower || a>arb[nr].upper)
return;
else if(arb[nr].lower == arb[nr].upper)
{arb[nr].mx -= b;return;}
update(a,b,nr*2+1);
update(a,b,nr*2+2);
arb[nr].mx = arb[2*nr+1].mx +arb[2*nr+2].mx;
}
int main()
{
f>>n>>m;
long long i;
for(i = 0;i<n;i++)
{
f>>v[i];
}
long long a,b;
create_nod(0,n-1,0);
for(i = 0;i<m;i++)
{
f>>op>>a>>b;
switch (op) {
case 1: {
g<<maxim(a-1, b-1,0)<<'\n';
break;
}
case 0: {
update(a-1, b,0);
break;
}
}
}
f.close();g.close();
}