每個葉子節點儲存每個線段的向量。
那麼答案就是線段樹區間和。
每次操作就是對向量進行旋轉,線段樹的區間更新加上向量旋轉公式搞定。
設有向量(x0,y0),逆時針旋轉a度後的向量為(x1,y1),有
x1=x0 * cos(a)- y0 * sin(a)
y1=x0 * sin(a)+ y0 * cos(a)
#include#include#include#includeusing namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define m_pi 3.14159265358979323846
const int maxn=10000,maxc=10000;
int n,c,s[maxc+10];
double a[maxc+10],l[maxn+10];
double vx[maxn<<2],vy[maxn<<2];
double ang[maxn<<2];
double pre[maxn+10];
void pushup(int rt)
void pushdown(int rt)
}void build(int l,int r,int rt)
int m=((l+r)>>1);
build(lson);
build(rson);
pushup(rt);
}void updata(int l,int r,double val,int l,int r,int rt)
pushdown(rt);
int m=((l+r)>>1);
if(l<=m) updata(l,r,val,lson);
if(r>m) updata(l,r,val,rson);
pushup(rt);
}int main(){
bool first=1;
while(~scanf("%d%d",&n,&c)){
for(int i=0;i
poj 2991 線段樹 成段更新 向量旋轉
輸入資料 n條線段,c條指令 n條線段的長度li 最初的線段都是在y軸上的 c條的指令是s,a,表示第s條線段和第s 1條線段的夾角調整為a度 每執行完一條命令輸出最後一條線段末尾的座標 注意 輸出的時候,c 中用 lf g 中用 f。keep maxn 儲存第i條邊與i 1邊的夾角 初始化為180...
POJ 2991 Crane(區間更新 向量旋轉)
題目大意 n個向量首尾相連,每次操作使某個區間中的所有向量都旋轉同樣的角度。每次操作後都回答最後乙個向量的座標。題目分析 區間維護向量資訊。向量旋 x1 x0 cos t y0 sin t y1 x0 sin t y0 cos t 其中t為旋轉的角度。如下 include include inclu...
線段樹區間更新 poj 1823
題意 乙個旅館有n個房間,有m次操作,每次操作可以是 1,從第a個房間開始的連續b個房間全部住滿 2 從a開始的b個房間全部清空 3 查詢n個房間中最長連續空房間的長度。思路對於每個節點,記錄這個節點的sta 狀態,val 最長連續空房 lmx 區間內左側連續空房間數 rmx 區間內右側連續空房間數...