constdouble PI = acos(-1.0); constint maxn = 100010; double vx[2 * maxn], vy[2 * maxn], ang[2 * maxn], prv[maxn]; int len[maxn]; int n, q;
voidinit(int v, int l, int r){// [l, r] if (l >= r) return; ang[v] = 0; vx[v] = 0; if (l + 1 == r) { vy[v] = len[l]; return; } int chl = 2 * v + 1, chr = 2 * v + 2, mid = (l + r) / 2; init(chl, l, mid); init(chr, mid, r); vy[v] = vy[chl] + vy[chr]; }
voidupdate(int s, double a, int v, int l, int r){ // angle changes a if (s <= l ||s >= r) return; int chl = 2 * v + 1, chr = 2 * v + 2, mid = (l + r) / 2; update(s, a, chl, l, mid); update(s, a, chr, mid, r); if (s <= mid) ang[v] += a; double Co = cos(ang[v]), Si = sin(ang[v]); vx[v] = vx[chl] + Co * vx[chr] - Si * vy[chr]; vy[v] = vy[chl] + Si * vx[chr] + Co * vy[chr]; }
intmain(){ int testcnt = 0; while (scanf("%d%d", &n, &q)!=EOF) { testcnt++; for (int i = 0; i < n; i++) scanf("%d", len + i); init(0, 0, n); for (int i = 0; i < n; i++) prv[i] = PI;
while (q--) { int s, angle_360; scanf("%d%d", &s, &angle_360); double a = (double)angle_360 / 180 * PI; update(s, a - prv[s], 0, 0, n); prv[s] = a; printf("%.2lf %.2lf\n", vx[0], vy[0]); } } }