Can somebody explain me how to speed up my solution. I used O ( 1 ) for SET function , and O ( N ^ 2 ) for SUM function, but it's , as I guess, not enough. : - (
Thanks in advance,
Aleksandar.
Thanks in advance,
Aleksandar.
#include <iostream>
using namespace std;
short bit[1026][1026] = {{0}};
short nvl[1025][1025] = {{0}};
char cmd[4];
long long sum(int x,int y) {
long long r = 0;
while(x) {
int ty = y;
while(ty) {
r += bit[x][ty];
ty -= (ty & -ty);
}
x -= (x & -x);
}
return r;
}
int main() {
int N;
scanf("%d",&N);
while(scanf("%s",cmd) == 1) {
if(cmd[0] == 'E') break;
if(cmd[1] == 'E') {
// set
int x,y,num, newval;
scanf("%d%d%d",&x,&y,&newval);
++x; ++y;
// num -= (sum(x,y)+sum(x-1,y-1)-sum(x-1,y)-sum(x,y-1));
num = newval - nvl[x][y];
nvl[x][y] = newval;
while(x <= N) {
int ty = y;
while(ty <= N) {
bit[x][ty] += num;
ty += (ty & -ty);
}
x += (x & -x);
}
}
else {
// sum
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
++x2; ++y2;
printf("%d\n",sum(x2,y2)+sum(x1,y1)-sum(x1,y2)-sum(x2,y1));
}
}
}...sum(x,y)+sum(x-1,y-1)-sum(x-1,y)-sum(x,y-1)It is the same thing as obtaining the sum of a rectangle from (x,y) to (x,y). :S
Evo dela koda
if ( Command[1] == 'E' )
{
int X, Y, Val;
scanf ( "%d %d %d", &X, &Y, &Val );
X++;
Y++;
Update ( X, Y, Val - Query ( X, Y, X, Y ) );
continue;
}
if ( Command[1] == 'U' )
{
int X1, Y1, X2, Y2;
scanf ( "%d %d %d %d", &X1, &Y1, &X2, &Y2 );
X1++;
Y1++;
X2++;
Y2++;
printf ( "%d\n", Query ( X1, Y1, X2, Y2 ) );
}
( a / b ) % m != ( ( a % m ) / ( b % m ) ) % m