标签:queue else metal tick contain actually bsp put iostream
#include <stdio.h> #include <stdlib.h> #include <cmath> #include <cstring> #include <iostream> #include<algorithm> #include <queue> #include <map> #include <vector> #include <cmath> #define INF 0x3f3f3f3f using namespace std; #define N 100005 #define LL long long int n, m; struct td { int l, r, sum; }tree[N*4]; void ju(int t) { if(tree[2*t].sum==tree[2*t+1].sum) { tree[t].sum=tree[2*t].sum; } else { tree[t].sum=-1; } } void build(int t, int l, int r) { tree[t].l=l; tree[t].r=r; if(l==r) { tree[t].sum=1; return; } int mid=(l+r)/2; build(2*t, l, mid); build(2*t+1, mid+1, r); ju(t); } void up(int t, int l, int r, int x) { if(tree[t].l==l&&tree[t].r==r) { tree[t].sum=x; return ; } if(tree[t].sum>0) { tree[2*t].sum=tree[t].sum; tree[2*t+1].sum=tree[t].sum; } int mid=(tree[t].l+tree[t].r)/2; if(r<=mid) { up(2*t, l, r, x); } else if(l>mid) { up(2*t+1, l, r, x); } else if(r>mid&&l<=mid) { up(2*t, l, mid, x); up(2*t+1, mid+1, r, x); } ju(t); } int qu(int t) { if(tree[t].sum==0) { return 0; } if(tree[t].sum>0) { return tree[t].sum*(tree[t].r-tree[t].l+1); } int res=0; res+=qu(2*t); res+=qu(2*t+1); return res; } int main() { int i, sum, x, y, T, t, z; scanf("%d", &T); for(t=1;t<=T;t++) { scanf("%d%d", &n, &m); build(1, 1, n); for(i=1;i<=m;i++) { scanf("%d%d%d", &x, &y, &z); up(1, x, y, z); } printf("Case %d: The total value of the hook is %d.\n", t, qu(1)); } return 0; }
标签:queue else metal tick contain actually bsp put iostream
原文地址:http://www.cnblogs.com/zct994861943/p/7221431.html