首页 > 代码库 > 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;}
View Code

线段树区间修改