POJ 2991 線段樹區間更新

2021-07-04 21:19:19 字數 1042 閱讀 5772

每個葉子節點儲存每個線段的向量。

那麼答案就是線段樹區間和。

每次操作就是對向量進行旋轉,線段樹的區間更新加上向量旋轉公式搞定。

設有向量(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 區間內右側連續空房間數...