Pagini recente » Cod sursa (job #140909) | Cod sursa (job #1288476) | Cod sursa (job #835564) | Cod sursa (job #856226) | Cod sursa (job #855348)
Cod sursa(job #855348)
#include <fstream>
#include <string.h>
#define MAXN 15001
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int noeib; //no of elem in bucket
int N,M,A[MAXN],buck[MAXN],nobk,bksize;
int rad(int x)
{
int i=1;
while (i*i<=x) i++;
return i-1;
}
void pay(int T,int val) //achitat valoare V in ziua T
{
int j=1;
A[T]-=val;
if (T<nobk*bksize)
buck[T/bksize]-=val;
}
int query(int P,int Q)
{
int i,sum=0;
while ((Q>=0)&&(Q%bksize!=bksize-1))
{sum+=A[Q];Q--;}
if (P!=Q)
while ((P<N)&&(P%bksize!=0)) {sum+=A[P];P++;}
for (i=(P/bksize);i<=(Q/bksize);i++)
sum+=buck[i];
return sum;
}
int main()
{
int i,a,j,b,sum,op;
f>>N>>M;
for (i=0;i<N;i++)
f>>A[i];
memset(buck,0,sizeof(buck));
bksize=rad(N);
nobk=N/bksize;
j=1;
for (i=0;i<N;i++)
buck[i/bksize]+=A[i];
for (i=1;i<=M;i++)
{
f>>op>>a>>b;
switch (op)
{
case 0:
pay(a-1,b);
break;
case 1:
sum=query(a-1,b-1);
g<<sum<<"\n";
break;
}
}
/*
g<<"\n";
for (i=0;i<nobk;i++)
g<<buck[i]<<" ";
g<<"\n";
for (i=0;i<N;i++)
g<<A[i]<<" ";*/
return 0;
}