背景买了新电脑就想着先把这道心腹大患解决了起步即蓝题开个好头顺便水一篇题解。题目大意给出一个长度为nnn的整数序列a1,a2,…,ana_1,a_2,\ldots,a_na1,a2,…,an进行mmm次操作操作分为两类。操作111给出l,r,vl,r,vl,r,v将al,al1,…,ara_l,a_{l1},\ldots,a_ral,al1,…,ar分别加上vvv。操作222给出l,rl,rl,r询问∑ilrsin(ai)\sum\limits_{il}^{r}\sin(a_i)il∑rsin(ai)。第一行输入一个整数nnn。接下来一行nnn个整数表示a1,a2,…,ana_1,a_2,\ldots,a_na1,a2,…,an。接下来一行一个整数mmm。接下来mmm行每行表示一个操作操作111表示为1 l r v操作222表示为2 l r。对每个操作222输出一行表示答案四舍五入保留一位小数。保证答案的绝对值大于0.10.10.1且答案的准确值的小数点后第二位不是444或555。保证1≤n,m,ai,v≤2×1051\leq n,m,a_i,v\leq 2\times 10^51≤n,m,ai,v≤2×1051≤l≤r≤n1\leq l\leq r\leq n1≤l≤r≤n。保证所有输入的数都是正整数。思路三角函数对本初三蒟蒻很显然不是很友好需要和差角公式sin(AB)sinAcosBcosAsinB\sin(AB)\sin A \cos B\cos A \sin Bsin(AB)sinAcosBcosAsinBcos(AB)cosAcosB−sinAsinB\cos(AB)\cos A\cos B-\sin A\sin Bcos(AB)cosAcosB−sinAsinB知道公式就要开始搓线段树。ts[o]ts[o]ts[o]维护区间的正弦值之和tc[o]tc[o]tc[o]维护区间的余弦值之和lazy[o]lazy[o]lazy[o]维护区间要加的数(整数)。有两个地方需要用到和差角公式pushdown和update。pushdown时要用lazy[o]lazy[o]lazy[o]更新ts/tc[o×2]ts/tc[o\times 2]ts/tc[o×2]和ts/tc[o×21]ts/tc[o\times 21]ts/tc[o×21]。update时要用vvv更新ts/tc[o]ts/tc[o]ts/tc[o]的值。其实就是把求和变成公式求和除了代码麻烦点儿思路还是很清晰。代码#includebits/stdc.husingnamespacestd;#defineN200005#defineintlonglong//必备intn,m,a[N],lazy[4*N];doublets[4*N],tc[4*N];//voidbuild(into,intl,intr){if(lr){ts[o]sin(a[l]);tc[o]cos(a[l]);return;}intmid(lr)/2;build(o*2,l,mid);build(o*21,mid1,r);ts[o]ts[o*2]ts[o*21];tc[o]tc[o*2]tc[o*21];}voidpushdown(into,intl,intr){if(!lazy[o])return;lazy[o*2]lazy[o];lazy[o*21]lazy[o];doublesinbsin(lazy[o]),cosbcos(lazy[o]);doublesinats[o*2],cosatc[o*2];ts[o*2]sina*cosbcosa*sinb;tc[o*2]cosa*cosb-sina*sinb;sinats[o*21],cosatc[o*21];ts[o*21]sina*cosbcosa*sinb;tc[o*21]cosa*cosb-sina*sinb;lazy[o]0;}voidupdate(into,intl,intr,intx,inty,intv){if(xlry){doublesinats[o],sinbsin(v),cosatc[o],cosbcos(v);ts[o]sina*cosbcosa*sinb;tc[o]cosa*cosb-sina*sinb;lazy[o]v;return;}pushdown(o,l,r);intmid(lr)/2;if(xmid)update(o*2,l,mid,x,y,v);if(ymid)update(o*21,mid1,r,x,y,v);ts[o]ts[o*2]ts[o*21];tc[o]tc[o*2]tc[o*21];}doublequery(into,intl,intr,intx,inty){if(xlry)returnts[o];pushdown(o,l,r);intmid(lr)/2;doubleans0;if(xmid)ansquery(o*2,l,mid,x,y);if(ymid)ansquery(o*21,mid1,r,x,y);returnans;}signedmain(){scanf(%lld,n);for(inti1;in;i)scanf(%lld,a[i]);build(1,1,n);scanf(%lld,m);intop,l,r,v;while(m--){scanf(%lld%lld%lld,op,l,r);if(op1){scanf(%lld,v);update(1,1,n,l,r,v);}else{doubleansquery(1,1,n,l,r);printf(%.1lf\n,ans);}}return0;}温馨提示分割线以下内容糖分超标谨慎观看。(但你已经看到了)Conclusion凑字数虽然不是自己独立思考的结果但是看见自己也能AC蓝题还是非常有成就感。虽然现在本蒟蒻还是有时会亖在橙题上但我觉得努力一定会有收获将来我也一定能切越来越多的蓝题、紫题、黑题……学无止境 超越自我。谨以此篇纪念自己的首道蓝题。\pmb{谨以此篇纪念自己的首道蓝题。}谨以此篇纪念自己的首道蓝题。祝即将中考的自己和广大考生\pmb{祝即将中考的自己和广大考生}祝即将中考的自己和广大考生中考必胜金榜题名\pmb{中考必胜金榜题名}中考必胜金榜题名