Cod sursa(job #1549759)
Utilizator | FMI Condrea Florin codi22 | Data | 12 decembrie 2015 18:49:20 |
---|---|---|---|
Problema | Datorii | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.79 kb |
#include <iostream>
#include <cstdio>
using namespace std;
double A[15001][1500],val,s;
long int i,j,k,n,m,p,poz,t,VreauSpatiu;
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
//scanf("%lli %lli",&n,&m);
cin>>n>>m;
for (i=0;i<n;i++)
{
cin>>A[0][i];
//scanf("%lli",&A[0][i]);
// cout<<A[0][i]<<"abc";
}
k=n/2;
for (i=1;(1<<i)<n;i++)
{
for (j=0;j<k;j++)
{
A[i][j]=A[i-1][j*2]+A[i-1][j*2+1];
}
k>>=1;
}
/* for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
cout<<A[i][j]<<" ";
}
cout<<'\n';
}
cout<<'\n';
*/
for (i=1;i<=m;i++)
{
//scanf("%lli %lli %lli",&p,&poz,&val);
cin>>p>>poz>>val;
poz--;
if (p==0)
{
j=0;
while (A[j][poz])
{
A[j][poz]-=val;
j++;
poz>>=1;
}
}
else
{
if (VreauSpatiu==1) cout<<'\n';
VreauSpatiu=1;
s=0;
val--;
while (poz<=val)
{
j=0;
t=poz;
while ((t+(1<<(j+1)))<val&&(t%2==0))
{
j++;
t>>=1;
}
s+=A[j][t];
poz+=(1<<j);
// cout<<s<<" "<<poz<<" ";
}
//printf("%ld",s);
cout<<s;
}
}
/* for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
cout<<A[i][j]<<" ";
}
cout<<'\n';
}
*/
}