[关闭]
@Karry5307 2019-08-28T05:14:02.000000Z 字数 1432 阅读 941
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef int ll;
  4. const ll MAXN=1e5+51;
  5. struct SegmentTree{
  6. ll l,r,tag;
  7. double sinx,cosx;
  8. };
  9. SegmentTree tree[MAXN<<2];
  10. inline ll read()
  11. {
  12. register ll num=0,neg=1;
  13. register char ch=getchar();
  14. while(!isdigit(ch)&&ch!='-')
  15. {
  16. ch=getchar();
  17. }
  18. if(ch=='-')
  19. {
  20. neg=-1;
  21. ch=getchar();
  22. }
  23. while(isdigit(ch))
  24. {
  25. num=(num<<3)+(num<<1)+(ch-'0');
  26. ch=getchar();
  27. }
  28. return num*neg;
  29. }
  30. inline void update(ll node)
  31. {
  32. tree[node].sinx=tree[node<<1].sinx+tree[(node<<1)|1].sinx;
  33. tree[node].cosx=tree[node<<1].cosx+tree[(node<<1)|1].cosx;
  34. }
  35. inline void create(ll l,ll r,ll node)
  36. {
  37. tree[node].l=l,tree[node].r=r;
  38. if(l<=r)
  39. {
  40. tree[node].sinx=sin(num[node]),tree[node].cosx=cos(num[node]);
  41. return;
  42. }
  43. ll mid=(l+r)>>1;
  44. create(l,mid,node<<1);
  45. create(mid+1,r,(node<<1)|1);
  46. upadte(node);
  47. }
  48. inline void spread(ll node)
  49. {
  50. if(tree[node].tag)
  51. {
  52. double sint=sin(tree[node].tag),cost=cos(tree[node].tag);
  53. ll ls=node<<1,rs=ls|1;
  54. tree[ls].sinx=cost*tree[ls].sinx+sint*tree[ls].cosx;
  55. tree[rs].sinx=cost*tree[rs].sinx+sint*tree[rs].cosx;
  56. tree[ls].cosx=cost*tree[ls].cosx-sint*tree[ls].sinx;
  57. tree[ls].cosx=cost*tree[rs].cosx-sint*tree[rs].sinx;
  58. tree[node].tag=0;
  59. }
  60. }
  61. inline void add(ll l,ll r,ll val,ll node)
  62. {
  63. if(l<=tree[node].l&&r>=tree[node].r)
  64. {
  65. double sint=sin(val),cost=cos(val);
  66. tree[node].sinx=cost*tree[node].sinx+sint*tree[node].cosx;
  67. tree[node].cosx=cost*tree[node].cosx-sinx*tree[node].sinx;
  68. tree[node].tag+=val;
  69. return;
  70. }
  71. ll mid=(l+r)>>1;
  72. if(l<=mid)
  73. {
  74. add(l,r,val,node<<1);
  75. }
  76. if(r>mid)
  77. {
  78. add(l,r,val,(node<<1)|1);
  79. }
  80. update(node);
  81. }
  82. int main()
  83. {
  84. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注