注意到
void update(int p,double sinx,double cosx){
double sina=t[p].sin,cosa=t[p].cos;
t[p].sin=sina*cosx+cosa*sinx;
t[p].cos=cosa*cosx-sina*sinx;
}
......
double tsin=sin(t[p].add),tcos=cos(t[p].add);
update(p*2,tsin,tcos);
update(p*2+1,tsin,tcos);
和
t[p*2].sin=t[p*2].sin*tcos+t[p*2].cos*tsin;
t[p*2].cos=t[p*2].cos*tcos-t[p*2].sin*tsin;
t[p*2+1].sin=t[p*2+1].sin*tcos+t[p*2+1].cos*tsin;
t[p*2+1].cos=t[p*2+1].cos*tcos-t[p*2+1].sin*tsin;
不同,后者t[son].cos由已经修改过的t[son].sin转移而来,故全WA
(蒟蒻调半天没看出来最后求助于dalao,被其一眼盯真)