poj 2991 线段树

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <stack>
 5 #include <queue>
 6 #include <map>
 7 #include <algorithm>
 8 #include <vector>
 9 #include <cmath>
10 #define pi 3.141592653
11 using namespace std;
12
13 const int maxn = 40005;
14
15
16 typedef long long LL;
17
18 int N,C;
19 int L[maxn];
20 int S[maxn],A[maxn];
21
22 double vx[maxn],vy[maxn];
23 double ang[maxn];
24 double pre[maxn];
25
26 void init(int l,int r,int rt)
27 {
28    ang[rt] = vx[rt] = 0.0;
29    if(r - l == 1) {
30     vy[rt] = L[l];
31    }
32    else{
33     int lch = rt*2+1;
34     int rch = rt*2+2;
35     int mid = (r + l )/2;
36     init(l,mid,lch);
37     init(mid,r,rch);
38     vy[rt] = vy[lch] + vy[rch];
39    }
40 }
41
42 void change(int s,double a,int rt,int l,int r)
43 {
44     if(s <= l) return ;
45     else if(s < r){
46         int lch = rt*2+1;
47         int rch = rt*2+2;
48         int mid = (l + r)/2;
49         change(s,a,lch,l,mid);
50         change(s,a,rch,mid,r);
51         if(s <= mid) ang[rt] += a;
52         double t = sin(ang[rt]);
53         double c = cos(ang[rt]);
54         vx[rt] = vx[lch] + (c*vx[rch] - t*vy[rch]);
55         vy[rt] = vy[lch] + (t*vx[rch] + c*vy[rch]);
56     }
57 }
58
59 void solve()
60 {
61     init(0,N,0);
62     for(int i=1;i<N;i++) pre[i] =  pi;
63     for(int i=0;i<C;i++){
64         int s = S[i];
65         double a = A[i]/360.0*2*pi;
66         change(s,a-pre[s],0,0,N);
67         pre[s] = a;
68         printf("%.2f %.2f\n",vx[0],vy[0]);
69     }
70 }
71
72 int main()
73 {
74     while(scanf("%d%d",&N,&C)!=EOF){
75     for(int i=0;i<N;i++){
76         scanf("%d",&L[i]);
77     }
78     for(int i=0;i<C;i++){
79         scanf("%d%d",&S[i],&A[i]);
80     }
81     solve();
82     }
83
84     return 0;
85 }

时间: 2024-12-21 04:18:32

poj 2991 线段树的相关文章

转载::POJ 2991 线段树+计算几何(有c++结构体操作)

POJ 2991 线段树+计算几何 (2011-02-27 21:13:44) 转载▼ 标签: 杂谈 分类: OI 话说这一题真的是很恶心很恶心,不过确实改变了我对线段树的一些看法,算是很经典的题目. 题意:有一个吊车由很多个不同长度的线段组成,一开始是一条长直线起点在(0,0),尾节点在(0,sum[n]),每条线段之间的夹角的初始值是180度.然后有一些操作a. b将第a条线段和a+1之间的夹角变成b度,经过每一次操作都要求出尾节点的坐标. 首先要用到一个计算几何的知识(没学过..请教而来)

POJ 2528 (线段树+离散化) Mayor&#39;s posters

因为将每个单位都作为一个最小单元的话会爆内存的 所以,将海报的每个端点进行排序,将这些端点最为最小的区间. 毕竟是刚刚接触线段树,理解起来还有些吃力,还是那句话,题做多了慢慢就好了. 萌萌的AC代码君贴上. 1 //#define LOCAL 2 #include <iostream> 3 #include <algorithm> 4 #include <cmath> 5 using namespace std; 6 7 int n; 8 struct CPost 9

poj 2777 线段树的区间更新

Count Color Time Limit: 1000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java class name: Main [Submit] [Status] [Discuss] Description Chosen Problem Solving and Program design as an optional course, you are required to solve al

poj 2750(线段树的动态规划)

Potted Flower Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4186   Accepted: 1581 Description The little cat takes over the management of a new park. There is a large circular statue in the center of the park, surrounded by N pots of f

POJ 2570 线段树

Potted Flower Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java class name: Main [Submit] [Status] [Discuss] Description The little cat takes over the management of a new park. There is a large circular statue in

poj 2828 线段树

http://poj.org/problem?id=2828 学到的思维: 1.变化的或者后来的优先影响前面的,那么从最后一个往前看,最后一个就成了 确定的, 并且后来的也可以确定----如果从前往后,所有的随时都不是确定的 2.线段树叶子节点直接维护区间(线段)信息,非叶子节点v维护的是以v为树根的整个子树的信息,那么假设父节点rt信息为[l,r]那么左子树维护[l,mid],右子树维护[mid+1,r]的信息.如果如果是前缀和,rt里是1-n的和,左子树1~n/2的和,右子树是n/2+1~n

POJ 3468 线段树+lazy标记

lazy标记 Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u Submit Status Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to

POJ 3667 线段树的区间合并简单问题

题目大意:有一排标号1-N的房间.操作一:询问是不是有连续长度为a的空房间,有的话住进最左边(占用a个房间)操作二:将[a,a+b-1]的房间清空(腾出b个房间)思路:记录每个区间中“靠左”“靠右”“中间”的空房间线段树操作:update:区间替换query:询问满足条件的最左端点 题目链接: http://vjudge.net/problem/viewProblem.action?id=10354 题目操作: 因为这里找从最左边住起的房间,所以这里不能像常规地写query函数那样写了,终于发现

poj 2886 线段树的更新+反素数

Who Gets the Most Candies? Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , %I64u Java class name: Main [Submit] [Status] [Discuss] Description N children are sitting in a circle to play a game. The children are numbered from