码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1698 Just a Hook 基本线段树

时间:2014-07-24 23:26:23      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:blog   使用   os   io   2014   re   c   amp   

使用线段树更新每段区间的奖(1,2,3),最后在统计整段区间的数和,基本线段树,果断1A啊

#include<iostream>
#include<stdio.h>
using namespace std;
#define N 100000
struct node{
    int l,r,p;
}a[N*4];
int n;
void build(int left,int right,int i){
    a[i].l=left;
    a[i].r=right;
    a[i].p=1;
    if(a[i].l==a[i].r){
        return ;
    }
    int mid=(a[i].l+a[i].r)>>1;
    build(left,mid,i*2);
    build(mid+1,right,i*2+1);
//    a[i].p=a[i*2].p+a[i*2+1].p;
}
void updata(int left,int right,int i,int p){
    if(left==a[i].l&&a[i].r==right){
        a[i].p=p;
        return ;
    }
    if(a[i].p>=1){
        a[i*2].p=a[i].p;
        a[i*2+1].p=a[i].p;
        a[i].p=-1;
    }
    int mid=(a[i].l+a[i].r)>>1;
    if(mid>=right)
        updata(left,right,i*2,p);
    else if(mid<left)
        updata(left,right,i*2+1,p);
    else{
        updata(left,mid,i*2,p);
        updata(mid+1,right,i*2+1,p);
    }
 //   a[i].p=a[i*2].p+a[i*2+1].p;
}
int ans=0;
void sum(int i){
 //   cout<<a[i].l<<" "<<a[i].r<<" "<<a[i].p<<endl;
    if(a[i].p!=-1){
        ans+=a[i].p*(a[i].r-a[i].l+1);
        return ;
    }
    sum(i*2);
    sum(i*2+1);

}
int main(){
    int t,s,x,y,z;
    scanf("%d",&t);
    int cou=1;
    while(t--){
        scanf("%d %d",&n,&s);
        build(1,n,1);
        while(s--){
            scanf("%d%d%d",&x,&y,&z);
            updata(x,y,1,z);
        }
        ans=0;
        sum(1);
        printf("Case %d: The total value of the hook is %d.\n",cou++,ans);
    }
}

hdu 1698 Just a Hook 基本线段树,布布扣,bubuko.com

hdu 1698 Just a Hook 基本线段树

标签:blog   使用   os   io   2014   re   c   amp   

原文地址:http://blog.csdn.net/youngyangyang04/article/details/38089077

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!