| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大牛看一下,怎么老是wrong answer呢?用了位运算,自己电脑上是可以。。。。。要是把所用的变量都改成__int64 就tle ,真是晕死,怎么改进呢?可以讲一下树状数组吗?怎么实现?谢谢!!!
#include <iostream>
#include <cstring>
using namespace std;
unsigned __int64 a[15626],x;
int main()
{
int test_case,r,inner_case,x1,x2,y1,y2,l,u;
long start,end,lstart,uend,tmp;
char op[2];
scanf("%d",&test_case);
while(test_case--){
scanf("%d%d",&r,&inner_case);
tmp=(r*r)>>6;
memset(a,0,tmp+1);
while(inner_case--){
scanf("%s",op);
if(op[0]=='C'){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
for(int i=x1;i<=x2;i++){
x=0;
x=~x;
start=(i-1)*r+y1;
end=(i-1)*r+y2;
l=((start-1)>>6);
u=((end-1)>>6);
tmp=start&63;
lstart=(tmp==0)?64:tmp;
tmp=end&63;
uend=(tmp==0)?64:tmp;
if(l==u){
x=(x<<(63-uend+lstart));
x=(x>>(64-uend));
a[l]=a[l]^x;
}
else{
x=x<<(lstart-1);
a[l]=a[l]^x;
x=0;
x=~x;
x=x>>(64-uend);
a[u]=a[u]^x;
for(int j=l+1;j<=u-1;j++){
a[j]=~a[j];
}
}
}
}
else{
scanf("%d%d",&x1,&y1);
y2=(x1-1)*r+y1;
l=(y2-1)>>6;
tmp=y2&63;
u=tmp==0?64:tmp;
x=1;
x=x<<(u-1);
printf("%d\n",((a[l]&x)!=0));
}
}
printf("\n");
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator