Pagini recente » Cod sursa (job #294679) | Cod sursa (job #3139904) | Cod sursa (job #3126359) | Cod sursa (job #934223) | Cod sursa (job #2592350)
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int N = 1 << 15, INF = 0;
int t[N], val, a, b, poz;
void update(int p, int st, int dr)
{
if(st == dr)
{
if(t[p] != 0){
t[p] -= val;
}
else{
t[p] = val;
}
return;
}
int m = (st+dr) / 2;
if(poz <= m)
{
update(2*p, st, m);
}
else
{
update(2*p + 1, m + 1, dr);
}
t[p] = t[2*p] + t[2*p + 1];
}
int interog(int p, int st, int dr)
{
if(a <= st && b >= dr)
return t[p];
int m = (st+dr) / 2, mst = -INF, mdr = -INF;
if(a <= m)
{
mst = interog(2*p, st, m);
}
if(b > m)
{
mdr = interog(2*p + 1, m + 1, dr);
}
return mst + mdr;
}
int main()
{
int n, t, q;
in >> n >> t;
for(int i = 1; i <= n; i++)
{
in >> val;
poz = i;
update(1, 1, n);
}
for(int i = 1; i <= t; i++)
{
in >> q;
if(q == 1)
{
in >> a >> b;
if(a > b)
swap(a, b);
out << interog(1, 1, n) << "\n";
}
else
{
in >> poz >> val;
update(1, 1, n);
}
}
return 0;
}