Pagini recente » Cod sursa (job #210159) | Cod sursa (job #1181578) | Cod sursa (job #41900) | Cod sursa (job #2484915) | Cod sursa (job #463307)
Cod sursa(job #463307)
/*
* File: main.cpp
* Author: [email protected]
*
* Created on June 14, 2010, 6:07 PM
*/
#include <stdlib.h>
#include <cstdio>
/*
*
*/
int aib[10001],nr,n,m;
#define ZERO(i) ()
void update(int p , int nr) {
for(int i = p ; i <= n ; i += ZERO(i) )
aib[i] = nr;
}
int query(int p) {
int sum = 0;
for( int i = p ; i >= 0 ; i -= ZERO(i) )
sum += aib[i];
}
int search(int s,int d,int nr) {
if(s > d) return -1;
int mij = ( i + j) / 2;
int s = query(mij);
if( s == nr )
return MAX( search(i,mij-1) , mij );
if(nr < s)
return search(i,mij-1);
else
return search(mij+1,j);
}
int main(int argc, char** argv) {
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i= 1 ; i <= n ; i++) {
scanf("%d",&nr);
update(i,nr);
}
for(int i = 1 ; i <= m ; i++) {
int t,p1,p2;
scanf("%d",&t);
if(t==2)
scanf("%d",&p1);
else
scanf("%d %d",&p1,&p2);
switch (t)
case 0 : { update(p1,p2); } break;
case 1 : { printf("%d\n", query(p2) - query(p1-1)); } break;
case 2 : { printf("%d\n",seach(p1)); } break;
}
return (EXIT_SUCCESS);
}