首页 > 代码库 > hdu 1698
hdu 1698
#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <cmath>#include <string>#include <vector>#include <list>#include <map>#include <queue>#include <stack>#include <bitset>#include <algorithm>#include <numeric>#include <functional>using namespace std;#define LL long long#define DB double#define N 100500const int INF = 0x3f3f3f3f;const LL INFF = 1LL << 60;const DB EPS = 1e-9;const DB OO = 1e15;const DB PI = acos(-1.0);int sum[N*4],col[N*4],ql,qr,v;void Pushup(int rt){ sum[rt] = sum[rt<<1] + sum[rt<<1|1];}void build(int rt,int l,int r){ sum[rt] = 1; col[rt] = 0; if(l == r) {return ;} int m = (l+r)>>1; build(rt<<1,l,m); build(rt<<1|1,m+1,r); Pushup(rt); return ;}void Pushdown(int rt,int m){ if(col[rt]) { col[rt<<1] = col[rt<<1|1] = col[rt]; sum[rt<<1] = (m-(m>>1))*col[rt]; sum[rt<<1|1] = (m>>1)*col[rt]; col[rt] = 0; return ; }}void updata(int rt,int l,int r){ if(l>=ql&&r<=qr) { sum[rt] = (r-l+1)*v; col[rt] = v; // Pushup(rt); return ; } Pushdown(rt,r-l+1); int m = (l+r)>>1; if(ql<=m) updata(rt<<1,l,m); if(m<qr) updata(rt<<1|1,m+1,r); Pushup(rt);}int main(){ int n,m,t,cas = 1; scanf("%d",&t); while(t--) { scanf("%d %d",&n,&m); build(1,1,n); while(m--) { scanf("%d %d %d",&ql,&qr,&v); updata(1,1,n); } printf("Case %d: The total value of the hook is %d.\n",cas++,sum[1]); } return 0;}
线段树区间修改
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。