hdu 1698

来源:互联网 发布:mysql 清空整个数据库 编辑:程序博客网 时间:2024/05/20 11:49
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <vector>#include <map>#include <set>#include <string>#include <cstring>#include <list>#include <queue>#include <stack>#include <cmath>using namespace std;#define PF(x) (scanf("%d",&x))#define PT(x,y) (scanf("%d%d",&x,&y))#define PR(x) (printf("%d\n",x))#define PRT(x,y)(printf("%d %d\n",x,y))#define PB(x)(scanf("%I64d",&x))#define PRB(x)(printf("%I64d\n",(x)))typedef __int64 LL;#define N 100005#define M 105#define Mod 1000#define Inf 0x7fffffff#define L(x) (x<<1)#define R(x) ((x<<1)|1)#define For(i,n) for(int i=0;i<n;i++)#define lowbit(x) (x) & (-x)#define mid(x,y) ((x+y)>>1)struct tree{int l,r;int f;int sum;};tree T[4*N];int n;int ar[N];inline int maxx(int a,int b){return a>b?a:b;}inline int minx(int a,int b){return a>b?b:a;}void build(int l,int r,int k){    T[k].l = l;T[k].r = r;T[k].f = 1;if(l == r) {T[k].sum = 1;return ;}    int mi = mid(l,r);build(l,mi,L(k));build(mi+1,r,R(k));T[k].sum = 1;}void update(int l,int r,int var,int k){if(l <= T[k].l && r>= T[k].r){T[k].sum = var;T[k].f = 1;return ;}if(T[k].f == 1){T[L(k)].f = 1;T[R(k)].f = 1;T[k].f = 2;T[L(k)].sum = T[R(k)].sum = T[k].sum;}int mi = mid(T[k].l,T[k].r);if(l<=mi) update(l,r,var,L(k));if(r>mi) update(l,r,var,R(k));}int sum(int l,int r,int k){if(T[k].f==1) return (r-l+1)*T[k].sum;int mi = mid(T[k].l,T[k].r);int ans = 0;if(l<=mi) ans+=sum(l,mi,L(k));if(r>mi) ans+=sum(mi+1,r,R(k));return ans;}void init(){int test;PF(test);For(i,test){PF(n);build(1,n,1);int q;PF(q);For(j,q){int x,y,z;PT(x,y);PF(z);update(x,y,z,1);}printf("Case %d: The total value of the hook is %d.\n",i+1,sum(1,n,1));}   return ;}int main(){init();return 0;}

原创粉丝点击