加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

E - Just a Hook HDU - 1698

发布时间:2020-12-13 17:32:42 所属栏目:PHP教程 来源:网络整理
导读:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 通过这个题练习了基本的 Pushdown 的操作 参考着蓝书的模板敲了一下,需要修改的地方就是:这里的区间修改是直接改变值而不是增加值 把+=改成=即可。 1 #include cmath 2 #include queue 3 #inclu

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698

通过这个题练习了基本的Pushdown的操作

参考着蓝书的模板敲了一下,需要修改的地方就是:这里的区间修改是直接改变值而不是增加值

把+=改成=即可。

 1 #include <cmath>
 2 #include <queue>
 3 #include <string>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <iostream>
 7 #include <algorithm>
 8 #define forn(i,n) for (int i = 0; i < (n); i++)
 9 #define forab(i,a,b) for (int i = (a); i <= (b); i++)
10 #define forba(i,b,a) for (int i = (b); i >= (a); i--)
11 #define mset(a,n) memset(a,n,sizeof(a))
12 #define fast ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
13 #define P pair<int,int>
14 #define fi first
15 #define se second
16 using namespace std;
17 #define N 100005
18 #define inf 0x3f3f3f3f
19 #define ll long long
20 struct SegmentTree
21 {
22     int l,r;
23     ll data;
24     ll add;
25     #define l(x) t[x].l
26     #define r(x) t[x].r
27     #define data(x) t[x].data
28     #define add(x) t[x].add
29 } t[N * 4 + 5];
30 ll n,m,cnt;
31 void build(int p,int l,int r)
32 {
33     l(p) = l;
34     r(p) = r;
35     add(p) = 0;
36     if(l==r)
37     {
38         data(p) = 1;
39         return;
40     }
41     int m = (l + r) / 2;
42     int ls = 2 * p,rs = 2 * p + 1;
43     build(ls,l,m);
44     build(rs,m + 1,r);
45     data(p) = data(ls) + data(rs);
46 }
47 void spread(int p)
48 {
49     if(add(p))
50     {
51         data(2 * p) = add(p) * (r(2 * p) - l(2 * p) + 1);
52         data(2 * p + 1) = add(p) * (r(2 * p + 1) - l(2 * p + 1) + 1);
53         add(2 * p) = add(p);
54         add(2 * p + 1) = add(p);
55         add(p) = 0;
56     }
57 }
58 void change(int p,int r,int d)
59 {
60     if(l<=l(p)&&r>=r(p))
61     {
62         data(p) = (r(p) - l(p) + 1) * d;
63         add(p) = d;
64         return;
65     }
66     spread(p);
67     int m = (l(p) + r(p)) / 2;
68     int ls = 2 * p,rs = 2 * p + 1;
69     if(l<=m)
70         change(ls,r,d);
71     if(r>m)
72         change(rs,d);
73     data(p) = data(ls) + data(rs);
74 }
75 int main()
76 {
77     fast;
78     cin >> cnt;
79     forab(cas,1,cnt)
80     {
81         cin >> n >> m;
82         build(1,n);
83         forab(i,m)
84         {
85             int x,y,z;
86             cin >> x >> y >> z;
87             change(1,x,z);
88         }
89         cout << "Case " << cas << ": The total value of the hook is " <<t[1].data<< "." << endl;
90     }
91 }
92 /*
93 1
94 10
95 2
96 1 5 2
97 5 9 3
98  */
View Code

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读