线段树 1698 Just a Hook 区间set更新

来源:互联网 发布:mobi域名 编辑:程序博客网 时间:2024/05/21 03:28

Just a Hook

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11297    Accepted Submission(s): 5591


Problem Description
In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is made up of several consecutive metallic sticks which are of the same length.



Now Pudge wants to do some operations on the hook.

Let us number the consecutive metallic sticks of the hook from 1 to N. For each operation, Pudge can change the consecutive metallic sticks, numbered from X to Y, into cupreous sticks, silver sticks or golden sticks.
The total value of the hook is calculated as the sum of values of N metallic sticks. More precisely, the value for each kind of stick is calculated as follows:

For each cupreous stick, the value is 1.
For each silver stick, the value is 2.
For each golden stick, the value is 3.

Pudge wants to know the total value of the hook after performing the operations.
You may consider the original hook is made up of cupreous sticks.
 

Input
The input consists of several test cases. The first line of the input is the number of the cases. There are no more than 10 cases.
For each case, the first line contains an integer N, 1<=N<=100,000, which is the number of the sticks of Pudge’s meat hook and the second line contains an integer Q, 0<=Q<=100,000, which is the number of the operations.
Next Q lines, each line contains three integers X, Y, 1<=X<=Y<=N, Z, 1<=Z<=3, which defines an operation: change the sticks numbered from X to Y into the metal kind Z, where Z=1 represents the cupreous kind, Z=2 represents the silver kind and Z=3 represents the golden kind.
 

Output
For each case, print a number in a line representing the total value of the hook after the operations. Use the format in the example.
 

Sample Input
11021 5 25 9 3
 

Sample Output
Case 1: The total value of the hook is 24.
 



#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define N 222222using namespace std;int num[N];struct Tree{    int l;    int r;    int sum;    int col;} tree[N*4];void push_up(int rt){    tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;}void push_down(int rt,int m){    if (tree[rt].col>0)    {        tree[rt<<1].col=tree[rt<<1|1].col=tree[rt].col;        tree[rt<<1].sum=(m-(m/2))*tree[rt].col;        tree[rt<<1|1].sum=(m/2)*tree[rt].col;        tree[rt].col=0;    }}void build(int root,int l,int r){    tree[root].l=l;    tree[root].r=r;    tree[root].sum=1;    tree[root].col=0;    if(tree[root].l==tree[root].r)    {        return;    }    int mid=(l+r)/2;    build(root<<1,l,mid);    build(root<<1|1,mid+1,r);    push_up(root);}void update(int root,int L,int R,int val){    if(L<=tree[root].l&&R>=tree[root].r)    {        tree[root].col=val;        tree[root].sum=val*(tree[root].r-tree[root].l+1);        return;    }    push_down(root,tree[root].r-tree[root].l+1);    int mid=(tree[root].l+tree[root].r)/2;    if (L<=mid)        update(root<<1,L,R,val);    if (R>mid)        update(root<<1|1,L,R,val);    push_up(root);}int main(){    int n,q,T;    scanf("%d",&T);    for (int lp=1;lp<=T;lp++)    {        scanf("%d",&n);        build(1,1,n);        scanf("%d",&q);        while (q--)        {            int x,y,z;            scanf("%d%d%d",&x,&y,&z);            update(1,x,y,z);        }        int ans=tree[1].sum;        printf("Case %d: The total value of the hook is %d.\n",lp,ans);    }    return 0;}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 业务员私收货款公司不发货怎么办 付款后商家没发货也不退钱怎么办 苹果7P修过主板耗电严重怎么办 oppo手机进水了开不了机怎么办 手机弯了变形但不影响使用怎么办 拼多多留错电话怎么办如果已经发货 苹果6手机后壳变形了怎么办 京东退货保修卡丢了怎么办 如果京东买的显示器屏碎了怎么办 在微信上买东西退货不退钱怎么办 手机分期付款不还款被起诉了怎么办 朋友用我的花呗分期不还钱怎么办 朋友用我身份证办分期不还钱怎么办 我手机号被别人绑定信用卡了怎么办 5s用不了4g网络怎么办 红米手机返回键没了怎么办 小米手机进水了开不了机怎么办 手机返回键和菜单键失灵怎么办 苹果5s指纹按键坏了怎么办 小米手机安卓系统耗电量大怎么办? 苹果5s充不进去电怎么办 苹果手机6s返回键失灵怎么办 本人被骗同时被利用骗了别人怎么办 京东取消订单后货到了该怎么办 京东电信日租卡流量顶置了怎么办 苹果6s进水后闪光灯不亮怎么办 华为手机情景义停车事项过期怎么办 拼多多付款后商品下架了怎么办 淘宝上买化妆品买到假货了怎么办 找苹果官网解id发票丢了怎么办 客人已交订金但要取消宴席怎么办 京东买的小米电视碎屏了怎么办 京东购买的电视碎屏了怎么办 淘宝上买手机不能用不给退怎么办 天猫申请退货退款卖家不处理怎么办 在淘宝买到货到付款的假苹果怎么办 跟朋友买手机买到假货怎么办 在淘宝网上买到不合格的产品怎么办 淘宝打假师打了我的店铺怎么办 收藏品公司关门跑路员工怎么办 客户快递签收后说货物短缺怎么办