Cod sursa(job #1310023)

Utilizator BlackBird_v.1.0Stephen Berg BlackBird_v.1.0 Data 6 ianuarie 2015 12:37:56
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
#define Nmax 4000013
int i,n,m,value,op,a;
int Stree[Nmax];

void update(int node, int st, int dr, int x, int y)
 {
  if (st>dr || x>dr || y<st) return ;
  if (st>=x && dr<=y) 
        {
		Stree[node]+=value;
		return;
	    }
 update(node*2,st,(st+dr)/2,x,y);
 update(node*2+1,(st+dr)/2+1,dr,x,y);
 Stree[node]=Stree[node*2]+Stree[node*2+1];
 }
 
int query(int node,int st,int dr,int x,int y)
{
 if (st>dr || x>dr || y<st) return 0;
 if (st>=x && dr<=y) return Stree[node];
 return (query(node*2,st,(st+dr)/2,x,y)+query(node*2+1,(st+dr)/2+1,dr,x,y));
}

int main(void)
{
 in>>n>>m;
 for (i=1;i<=n;++i)
  {
   in>>value;
   update(1,1,n,i,i);
  }
 while(m--)
  {
   in>>op>>a>>value;
   if (op==1) out<<query(1,1,n,a,value)<<"\n";
   if (op==0) value*=-1, update(1,1,n,a,a);
  }		
 return 0;
}