利用qq 群做网站推广我爱777在线免费观看
利用qq 群做网站推广,我爱777在线免费观看,免费公益虚拟主机,网站域名备案需要多长时间和普通的线段树不同的是#xff0c;查询x~y的话#xff0c;给出的答案是第一个值的一倍加上第二个值的两倍一直到第n个值的n倍。 思路的话#xff0c;就是关于query和pushup的方法。用一个新的变量sum记录一下这个区间里面按照答案给出的方式的值#xff0c;比如说#xf… 和普通的线段树不同的是查询x~y的话给出的答案是第一个值的一倍加上第二个值的两倍一直到第n个值的n倍。 思路的话就是关于query和pushup的方法。用一个新的变量sum记录一下这个区间里面按照答案给出的方式的值比如说这个节点的区间是1~3那么这个节点的sum值就是(1*val[1]2*val[2]3*val[3])。那么对于pushup操作当前这个节点的sum值是左边的sum值左边的区间长度*右边的c值c值代表的是这个区间的所有元素的和右边的sum值。这样的话就相当于右边的sum升高了需要的高度就满足题意了。 另外关于query也是类似要返回时加上(l-ql)倍的c[o]的值就行了这样就相当于右边的sum升高了(l-ql)的高度了。如果不能理解可以手动模拟一下试试。 但是这题WA了好多次因为我现在才知道原来uva的long long得用lldQAQ。。。 具体见代码 1 #include stdio.h2 #include algorithm3 #include string.h4 #define t_mid (lr1)5 #define ls o16 #define rs o1 | 17 #define lson ls,l,t_mid8 #define rson rs,t_mid1,r9 using namespace std;
10 typedef long long ll;
11
12 const int N 100000 5;
13 ll c[N2],sum[N2],add[N2];
14
15 void pushup(int o,int len){c[o]c[ls]c[rs];sum[o]sum[ls]c[rs]*lensum[rs];}
16
17 void build(int o,int l,int r)
18 {
19 add[o]0;
20 if(lr) {c[o]sum[o]100;return;}
21 build(lson);
22 build(rson);
23 pushup(o,t_mid-l1);
24 }
25
26 void pushdown(int o,int len)
27 {
28 if(add[o])
29 {
30 int llen(len-(len1)),rlen(len1);
31 add[ls] add[o];
32 add[rs] add[o];
33 c[ls] add[o]*llen;
34 c[rs] add[o]*rlen;
35 sum[ls] add[o]*(llen)*(llen1)/2;
36 sum[rs] add[o]*(rlen)*(rlen1)/2;
37 add[o]0;
38 }
39 }
40
41 void update(int o,int l,int r,int ql,int qr,int dt)
42 {
43 if(ql l qr r)
44 {
45 add[o] (ll)dt;
46 c[o] (ll)dt*(r-l1);
47 sum[o] (ll)dt*(r-l1)*(r-l2)/2;
48 return;
49 }
50 pushdown(o,r-l1);
51 if(ql t_mid) update(lson,ql,qr,dt);
52 if(qr t_mid) update(rson,ql,qr,dt);
53 pushup(o,t_mid-l1);
54 }
55
56 ll query(int o,int l,int r,int ql,int qr)
57 {
58 if(ql l qr r)
59 {
60 return (l-ql)*c[o]sum[o];
61 }
62 pushdown(o,r-l1);
63 ll res 0;
64 if(ql t_mid) res query(lson,ql,qr);
65 if(qr t_mid) res query(rson,ql,qr);
66 return res;
67 }
68
69 int main()
70 {
71 int T;
72 scanf(%d,T);
73 for(int kase1;kaseT;kase)
74 {
75 printf(Case %d:\n,kase);
76 int n,m;
77 scanf(%d%d,n,m);
78 build(1,1,n);
79
80 while(m--)
81 {
82 char s[10];
83 scanf(%s,s);
84 if(s[0]c)
85 {
86 int x,y,dt;
87 scanf(%d%d%d,x,y,dt);
88 update(1,1,n,x,y,dt);
89 }
90 else
91 {
92 int x,y;
93 scanf(%d%d,x,y);
94 printf(%lld\n,query(1,1,n,x,y));
95 }
96 }
97 }
98 } 转载于:https://www.cnblogs.com/zzyDS/p/5649009.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90420.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!