Mai intai trebuie sa te autentifici.
Cod sursa(job #2457874)
Utilizator | Data | 18 septembrie 2019 22:10:33 | |
---|---|---|---|
Problema | Datorii | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.42 kb |
#include <iostream>
#include <cstdio>
using namespace std;
long long n, m;
long long aib[150000];
#define zeros(i) ( (i ^ (i - 1) & i ))
void tartozas_beolvas(int nap, int penz)
{
for(int i=nap; i<=n; i+=zeros(i))
{
aib[i]+=penz;
}
}
void fizet(int nap, int penz)
{
for(int i=nap; i<=n; i+=zeros(i))
{
aib[i]-=penz;
}
}
int lekerdez(int veg)
{
long long ered_veg = 0;
for(int i=veg; i>0; i-=zeros(i))
{
ered_veg += aib[i];
}
return ered_veg;
}
int main()
{
/*ifstream f("datorii.in");
ofstream g("datorii.out");*/
FILE * myInFile;
FILE * myOutFile;
myInFile = fopen ("datorii.in","r");
myOutFile = fopen ("datorii.out","w");
//adatok beolvasasa
fscanf(myInFile, "%lld %lld", &m, &n);
long long tartozas;
for(long long i=1; i<=n; i++)
{
fscanf(myInFile, "%lld", &tartozas);
tartozas_beolvas(i, tartozas);
}
//muveletek feldolgozasa
long long kod, a, b;
long long ki;
for(long long i=1; i<=m; i++)
{
fscanf(myInFile, "%lld %lld %lld", &kod, &a, &b);
if(kod==0)
{
fizet(a, b);
}
else
{
ki = lekerdez(b)-lekerdez(a-1);
fprintf(myOutFile, "%lld\n", ki);
}
// g<<lekerdez(a, b)<<endl;
}
return 0;
}