luogu#P5891. Fracture Ray

Fracture Ray

题目背景

破碎的镜面里倒映着破碎的射线;

破碎的文字中隐藏着破碎的——

题目描述

有一个 long long 类型的数组 a[]

在给出所有操作之前,给定上界参数 vv

共有 qq 次操作。每次操作为以下两个函数之一:

void modify(int u,int p)
{
    for (int i=u;i<=v;i+=count(i))
        a[i]+=p;
}
long long query(long long u)
{
    long long ret=0;
    for (int i=u;i<=v;i+=count(i))
        ret+=a[i];
    return ret;
}

上述程序为 C++ 代码,其中 count(i) 表示 ii 二进制下 11 的个数,例如 count(0) 的返回值为 00,而 count(10001279) 的返回值为 1515

上述程序中出现的变量 v 即上界参数 vv

你需要执行上述操作,并在每次执行 query() 函数后,输出函数的返回值。

输入格式

从标准输入中读取数据。

第一行,两个正整数 q,vq,v,表示操作数,以及上界参数。

接下来 qq 行,每行为以下二者之一:

  • 1 u p 表示执行 modify(u,p)
  • 2 u 表示执行 query(u) 并输出一行一个整数,为函数的返回值。

输出格式

在每次执行 query() 函数后,输出函数的返回值。

7 19
1 3 -8
1 4 8
1 13 -1
2 2
1 1 -10
1 1 8
2 12

-10
-10

29 1066163924
2 680224223
1 440869582 -1203
2 993311885
1 729027357 9874
2 665374856
1 192704973 -9712
1 681750770 -1099
2 239837676
1 938998353 -109
2 174153423
1 781133679 7360
2 522379034
2 125773599
1 483114333 -376
2 723115805
2 699246389
1 527125403 9279
1 930492461 -9753
1 14775627 -3676
1 152692805 5045
1 945645197 2710
2 298593273
1 888744817 2514
1 651751441 4559
2 963653895
1 986621281 -8296
2 10216021
2 848072343
2 482342087

0
-5264389353
181209893739
-398925734374
-431628986929
-73026998100
-298228449649
73714612345
53926122085
97102847037
96145153438
110646771673
199641765482
314932271763

提示

子任务 1(88 分):1q1031\leq q\leq 10^31v1041\leq v\leq 10^4

子任务 2(2323 分):1v1051\leq v\leq 10^5

子任务 3(1616 分):1q501\leq q\leq 50

子任务 4(2828 分):1q10001\leq q\leq 1000

子任务 5(2525 分):无特殊限制。

对于全部数据,1q2×1051\leq q\leq 2\times 10^51uv<2301\leq u\leq v< 2^{30}104p104-10^4\leq p\leq 10^4

请选手注意代码实现时常数因子带来的程序效率上的影响。

已加入 hack 数据。