HDOJ 1698 Just a Hook
来源:互联网 发布:返利网 淘宝taosave 编辑:程序博客网 时间:2024/05/17 22:13
题意:给出n组数据,每组第一行表示数的范围,第二行表示有k组数据,接下来k行,每行有三个数,l,r,t,将l->r范围内的所有数变成t,求最终的这个数列的和
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698
思路:线段树成段更新,查询树根。
注意点:裸线段树,第一次cin没关闭流同步TLE了一次。
以下为AC代码:
Run IDSubmit TimeJudge StatusPro.IDExe.TimeExe.MemoryCode Len.LanguageAuthor126168062014-12-30 19:13:23Accepted16981045MS3784K2260 BG++luminous11#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <vector>#include <deque>#include <list>#include <cctype>#include <algorithm>#include <climits>#include <queue>#include <stack>#include <cmath>#include <map>#include <set>#include <iomanip>#include <cstdlib>#include <ctime>#define ll long long#define ull unsigned long long#define all(x) (x).begin(), (x).end()#define clr(a, v) memset( a , v , sizeof(a) )#define pb push_back#define mp make_pair#define read(f) freopen(f, "r", stdin)#define write(f) freopen(f, "w", stdout)using namespace std;int num[100005<<2];int cnt[100005<<2];inline void pushdown ( int rt, int len ){ if ( cnt[rt] > 0 ) { cnt[rt<<1] = cnt[rt<<1|1] = cnt[rt]; num[rt<<1] = ( len - ( len >> 1 ) ) * cnt[rt]; num[rt<<1|1] = ( len >> 1 ) * cnt[rt]; cnt[rt] = 0; }}void update ( int L, int R, int l, int r, int rt, int n ){ if ( L <= l && r <= R ) { cnt[rt] = n; num[rt] = ( r - l + 1 ) * n; return; } else { pushdown ( rt, r - l + 1 ); int mid = ( l + r ) >> 1; if ( L <= mid ) { update ( L, R, l, mid, rt << 1, n ); } if ( mid < R ) { update ( L, R, mid + 1, r, rt << 1 | 1, n ); } num[rt] = num[rt<<1] + num[rt<<1|1]; }}void build ( int l, int r, int rt ){ cnt[rt] = 0; if ( l == r )num[rt] = 1; else { int mid = ( l + r ) >> 1; build ( l, mid, rt << 1 ); build ( mid + 1, r, rt << 1 | 1 ); num[rt] = num[rt<<1] + num[rt<<1|1]; }}int main(){ ios::sync_with_stdio( false ); int ncase; cin >> ncase; for ( int nc = 1; nc <= ncase; nc ++ ) { int m, k, l, r, n; memset ( num, 0, sizeof ( num ) ); cin >> m >> k; build ( 1, m, 1 ); for ( int i = 0; i < k; i ++ ) { cin >> l >> r >> n; update ( l, r, 1, m, 1, n ); } cout << "Case " << nc << ": The total value of the hook is " << num[1] << "." << endl; } return 0;}
0 0
- HDOJ 1698 Just a Hook
- hdoj 1698 Just a Hook
- hdoj 1698 Just a hook!
- HDOJ 1698 - Just a Hook
- HDOJ 1698 Just a Hook
- HDOJ 1698 Just a Hook
- HDOJ-1698 Just a Hook
- hdoj 1698 Just a Hook
- hdoj 1698 Just a Hook 【线段树】
- 【线段树】HDOJ 1698 Just a Hook
- hdoj 1698 Just a Hook【线段树】
- HDOJ 1698 Just a Hook [区间替换+区间查询]
- hdoj 1698--Just a Hook 线段树练习
- hdoj 1698 Just a Hook 【线段树 区间更新】
- HDOJ 1698 Just a Hook(区间更新)
- hdoj 1698 Just a Hook 【线段树区间修改】
- HDOJ 1698 Just a Hook (线段树)
- hdu 1698 Just a Hook
- iOS的持续集成
- cocos2d-x学习之3.3
- unity3d 切换场景不销毁对象池中的物体方案
- Python学习之字典与控制语句
- jdbc-数据库连接-12-29-2014
- HDOJ 1698 Just a Hook
- 基于qvfb的应用小程序开发
- C# 多线程操作控件
- 最简单最专业的windows编程入门
- Xcode插件制作
- WPF触发器
- jxls模板导出excel
- php调用基于soap的webserver
- Automated Builds on Docker Hub