标签:
Description
#include<iostream> #include<cstdio> #include<cmath> #define lson L,M,po*2 #define rson M+1,R,po*2+1 using namespace std; struct state { double x,y; }; const double PI=atan2(1.0,1.0)*4; state BIT[10004*4]; int COL[10004*4]; int rang[10004]; void change(int po,int ct) { double tang; double len; tang=atan2(BIT[po].y,BIT[po].x); len=sqrt(BIT[po].x*BIT[po].x+BIT[po].y*BIT[po].y); tang+=ct*PI/180.0; BIT[po].x=len*cos(tang); BIT[po].y=len*sin(tang); } void pushUP(int po) { BIT[po].x=BIT[po*2].x+BIT[po*2+1].x; BIT[po].y=BIT[po*2].y+BIT[po*2+1].y; } void pushDown(int po) { if(COL[po]) { change(po*2,COL[po]); change(po*2+1,COL[po]); COL[po*2]+=COL[po]; COL[po*2+1]+=COL[po]; COL[po]=0; } } void build_tree(int L,int R,int po) { COL[po]=0; //DON‘T FORGET !!! if(L==R) { int temp; BIT[po].x=0; COL[po]=0; scanf("%d",&temp); BIT[po].y=temp; return; } int M=(L+R)/2; build_tree(lson); build_tree(rson); pushUP(po); } void update(int ul,int ur,int ut,int L,int R,int po) { if(ul<=L&&ur>=R) { change(po,ut); COL[po]+=ut; COL[po]%=360; return; } pushDown(po); int M=(L+R)/2; if(ul<=M) update(ul,ur,ut,lson); if(ur>M) update(ul,ur,ut,rson); pushUP(po); } int main() { int n,c; int a,b; int cas=0; while(~scanf("%d %d",&n,&c)) { if(cas++) printf("\n"); build_tree(1,n,1); for(int i=1;i<=n;++i) rang[i]=0; for(int i=1;i<=c;++i) { scanf("%d %d",&a,&b); b-=180; if(b==-180) b=180; update(a+1,n,b-rang[a],1,n,1); rang[a]=b; printf("%.2lf %.2lf\n",BIT[1].x,BIT[1].y); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/whywhy/p/4197852.html