Cod sursa(job #38863)

Utilizator gigi_becaliGigi Becali gigi_becali Data 26 martie 2007 10:46:03
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#define maxn 1<<15
int S[maxn];
int n, m;

void update(int n, int l, int r, int p, int val, int sgn)
{
	S[n]+=val*sgn;
	if(l>=r) return ;
	int m=(l+r)/2;
	if(p<=m) update(2*n, l, m, p,val, sgn);
	else     update(2*n+1, m+1, r, p,val,sgn);
}

int query(int n, int l, int r, int a, int b)
{
	if(a<=l && b>=r) return S[n];
	int m=(l+r)/2, t=0;
	if(a<=m) t+=query(2*n, l, m, a, b);
	if(b>m)  t+=query(2*n+1, m+1, r, a, b);
	return t;
}

int main()
{
	freopen("datorii.in","r", stdin);
	freopen("datorii.out", "w", stdout);
	scanf("%d %d\n", &n, &m);
	int i, t;
	for(i=1;i<=n;i++) { scanf("%d ", &t); update(1, 1, n, i, t, 1);}
int p, q;
	for(i=1;i<=m;i++)
	{
		scanf("%d %d %d\n", &t,&p, &q );
		if(t==0) update(1, 1, n, p, q, -1);
		else printf("%d\n", query(1, 1, n, p, q));
	}
	return 0;
}