Cod sursa(job #1434985)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 11 mai 2015 19:53:32
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <utility>
#include <string>
#include <cstring>
#include <cctype>
#include <math.h>
#include <cstdio>
#include <cstdlib>
#include <limits>
#include <sstream>
#include <deque>
#include <bitset>
#include <complex>
#include <functional>
#include <memory>
#include <numeric>
//#define x first
#define y second
typedef std::pair<int, int> pii;
using namespace std;
int a, b, x[15006], y[1000000], val, poz, m, lax;
int start, finish;
void update(int nod, int st, int dr)
{
        if(st == dr)
        {
            y[nod] = val;
            return ;
        }
        int m = (st + dr) / 2;
        if(poz <= m)
            update(2 * nod, st, m);
        else
            update(2 * nod + 1, m + 1, dr);
        y[nod] = y[nod * 2] + y[nod * 2 + 1];
}
void minmax(int nod, int st, int dr)
{
    if(start <= st && finish >= dr)
    {
		lax += y[nod];
            return;
    }
    int m = (st + dr) / 2;
    if(start <= m)
        minmax(2 * nod, st, m);
    if(m < finish)
        minmax(2 * nod + 1, m + 1, dr);
}
int main () {
	ifstream cin("datorii.in");
	ofstream cout("datorii.out");
	int v, n;
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        cin >> x[i];
        val = x[i];
        poz = i;
        update(1, 1, n);
    }
	int h;
    for(int i = 0; i < m; i++)
    {
        lax = 0;
        cin >> h >> a >> b;
		if(h == 1)
		{
			start = a;
			finish = b;
			minmax(1, 1, n);
			cout << lax << "\n";
		}
		else
		{
			poz = a;
			val = x[a] - b;
			update(1, 1, n);
		}
    }
   // for(int i = 0; i < 100; i++)
        //cout << y[i] << " ";
    return 0;
}