做法顯然 就是維護一顆線段樹
裡面裝4個東西 區間x的和 區間y的和 區間$x^2$的和 區間$xy$的和
然後裝4個標記 add操作對x的影響 add操作對y的影響 cover操作對x的影響 cover操作對y的影響
唯一要想一想的東西在於怎麼維護順序
我一開始的愚蠢做法是每個節點維護乙個nw nw=0表示當前節點上一次受到的操作是add nw=1表示....是cover
然後每次pushdown的時候 例如當前節點的nw是0 現在我們把它pushdown 我們看左兒子 如果他的nw是1 我們就得先pushdown它的左兒子 然後在更新左兒子的值 右兒子類似
如果當前節點的nw是1 也就是cover操作 就不需要管左兒子和右兒子的nw 因為全都被cover掉了
這樣複雜度是
事實上這樣寫很麻煩
我們不需要維護nw 因為cover操作的特殊性: cover之後就不用管之前幹了什麼
那麼對於乙個節點 如果tag1,tag2不為0 且tag3,tag4也不為0 那麼我們先做tag3,tag4也就是先cover
每次cover操作的時候我們把節點的tag1,tag2設為0,也就是之前的操作全不管
這樣複雜度少乙個log 而且好寫一些
1 #include2view codeusing
namespace
std;
3 typedef long
long
ll;4
5ll read()
8while(c>='
0' && c<='9')
9return x*f;10}
1112
struct
node
2021
void
pr()
24 } tr[400400
];25
26#define lc (i<<1)
27#define rc (i<<1|1)
28 ll x[100100],y[100100
];29
30 inline long
double calc_sum(int l,int
r)33 inline long
double calc_sqr(int
l)36 inline long
double calc_sqr(int l,int
r)39
40void update(int
i)46
47void build(int i,int l,int
r)54
int md=(l+r)>>1
;55 build(lc,l,md),build(rc,md+1
,r);
56update(i);57}
5859
void change(int i,long
double s,long
double
t)68
69void pushdown2(int
i)75
76void change(int i,long
double s,long
double
t)84
85void pushdown1(int
i)91
92void pushdown(int
i)96
if(tr[i].tag1!=0 || tr[i].tag2!=0)99
}100
101void change1(int i,int l,int r,int s,int
t)107
pushdown(i);
108change1(lc,l,r,s,t);
109change1(rc,l,r,s,t);
110update(i);
111}
112113
void change2(int i,int l,int r,int s,int
t)119
pushdown(i);
120change2(lc,l,r,s,t);
121change2(rc,l,r,s,t);
122update(i);
123}
124125 node query(int i,int l,int
r)136
137void ask(int l,int
r)146
147int
n,m;
148149
intmain()
163else
if(tp==2
)167
else
if(tp==3
)171
}172
return0;
173}
174175
/*176
3 5177
1 2 3
1781 2 3
1791 1 3
1802 2 3 -3 2
1811 1 2
1823 1 2 2 1
1831 1 3
184*/
都得開long double
一開始只開了long long ** 調了半天
BZOJ 4821 Sdoi2017 相關分析
description frank對天文學非常感興趣,他經常用望遠鏡看星星,同時記錄下它們的資訊,比如亮度 顏色等等,進而估算出 星星的距離,半徑等等。frank不僅喜歡觀測,還喜歡分析觀測到的資料。他經常分析兩個引數之間 比如亮度和 半徑 是否存在某種關係。現在frank要分析引數x與y之間的關係...
BZOJ4821 SDOI2017 相關分析
bzoj luogu 你需要維護兩個陣列 資瓷一下三種操作。1 給出 l,r 設 overline x,overline y 分別表示區間 l,r 內 x i,y i 的平均數,求 frac r x i overline x y i overline y r x i overline x 2 2 給...
4821 Sdoi2017 相關分析
4821 sdoi2017 相關分析 time limit 10 sec memory limit 128 mb submit 191 solved 29 submit status discuss description frank對天文學非常感興趣,他經常用望遠鏡看星星,同時記錄下它們的資訊,比...