TouchStone
  请登录后使用
登录 注册
 系统首页  练习题库  考试列表  判题结果  问题讨论与解答  统计信息与排名
  • 首页
  • 题库
  • P3998
  • 题目
  • P3998[JLOI2015 DAY1]城池攻占
    限制 : 时间限制 : - MS   空间限制 : 165536 KB
    评测说明 : 10s
    问题描述

    小铭铭最近获得了一副新的桌游,游戏中需要用m 个骑士攻占n 个城池。
    这n 个城池用1 到n 的整数表示。除1 号城池外,城池i 会受到另一座城池fi 的管辖,
    其中fi < i。也就是说,所有城池构成了一棵有根树。这m 个骑士用1 到m 的整数表示,其
    中第i 个骑士的初始战斗力为si,第一个攻击的城池为ci。
    每个城池有一个防御值hi,如果一个骑士的战斗力大于等于城池的生命值,那么骑士就可
    以占领这座城池;否则占领失败,骑士将在这座城池牺牲。占领一个城池以后,骑士的战斗力
    将发生变化,然后继续攻击管辖这座城池的城池,直到占领1 号城池,或牺牲为止。
    除1 号城池外,每个城池i 会给出一个战斗力变化参数ai; vi。若ai = 0,攻占城池i 以后
    骑士战斗力会增加vi;若ai = 1,攻占城池i 以后,战斗力会乘以vi。
    注意每个骑士是单独计算的。也就是说一个骑士攻击一座城池,不管结果如何,均不会影
    响其他骑士攻击这座城池的结果。
    现在的问题是,对于每个城池,输出有多少个骑士在这里牺牲;对于每个骑士,输出他攻
    占的城池数量。

    输入格式

    第1 行包含两个正整数n;m,表示城池的数量和骑士的数量。
    第2 行包含n 个整数,其中第i 个数为hi,表示城池i 的防御值。
    第3 到n + 1 行,每行包含三个整数。其中第i + 1 行的三个数为fi; ai; vi,分别表示管辖
    这座城池的城池编号和两个战斗力变化参数。
    第n + 2 到n + m + 1 行,每行包含两个整数。其中第n + i 行的两个数为si; ci,分别表
    示初始战斗力和第一个攻击的城池。

    输出格式

    输出n + m 行,每行包含一个非负整数。其中前n 行分别表示在城池1 到n 牺牲的骑士
    数量,后m 行分别表示骑士1 到m 攻占的城池数量。

    样例输入

    5 5
    50 20 10 10 30
    1 1 2
    2 0 5
    2 0 -10
    1 0 10
    20 2
    10 3
    40 4
    20 4
    35 5

    样例输出

    2
    2
    0
    0
    0
    1
    1
    3
    1
    1

    提示

     对于 100% 的数据,1 <= n;m <= 300000; 1 <= fi<i; 1 <= ci <= n; -10^18 <= hi,vi,si <= 10^18;ai等于1或者2;当 ai =1 时,vi > 0;保证任何时候骑士战斗力值的绝对值不超过 10^18。