Problem M

GCPC2018 Problem M: Mountaineers MST+LCA 阅读详情

Problem Description

You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the sum of numbers in a given interval.

Input

The first line contains two numbers N and Q. 1 ≤ N,Q ≤ 100000.
The second line contains N numbers, the initial values of A1, A2, ... , AN. -1000000000 ≤ Ai ≤ 1000000000.
Each of the next Q lines represents an operation.
"C a b c" means adding c to each of Aa, Aa+1, ... , Ab. -10000 ≤ c ≤ 10000.
"Q a b" means querying the sum of Aa, Aa+1, ... , Ab.

Output

You need to answer all Q commands in order. One answer in a line.

Sample Input

10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4

Sample Output

4
55
9
15

//典型的延迟操作
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include<iostream>
using namespace std;
#define MAXN 102000

struct  node 
{
    int l;
    int r;
    __int64 sum;
    __int64 add;
}t[4*MAXN];

__int64 rr[MAXN];

void build(int id,int l,int r)
{
    int mid = (l+r)/2;
    t[id].l = l;
    t[id].r = r;
    t[id].add=0;
    if(r==l)
    {
        t[id].sum = rr[l];
     //   t[id].add = 0;
    }
    else
 //   t[id].add = 0;
    if(r>l)
    {
        build(id*2,l,mid);
        build(id*2+1,mid+1,r);
        t[id].sum = t[id*2].sum + t[id*2+1].sum;
    }
}

void change(int id,int start,int end,__int64 num)
{
    if(start==t[id].l && end==t[id].r)
    {
        t[id].add += num;
        return ;
    }
    t[id].sum+= (end-start+1)*num;
    int mid = (t[id].l + t[id].r)/2;    
    //延迟操作
    if(t[id].add != 0)
    {
        t[id].sum += (t[id].r-t[id].l+1)*t[id].add;
        change(id*2,t[id].l,mid,t[id].add);
        change(id*2+1,mid+1,t[id].r,t[id].add);
        t[id].add = 0;
    }
    if(mid>=end)
    {
         change(id*2,start,end,num);
    }
    else if(mid+1<=start)
    {
          change(id*2+1,start,end,num);
    }
    else
    {
        change(id*2,start,mid,num);
        change(id*2+1,mid+1,end,num);
    }
}

__int64 ans;

void find(int id,int start,int end)
{
    if (t[id].l==start && t[id].r == end)
    {
        ans+=t[id].sum+(t[id].r-t[id].l+1)*t[id].add;
        return;
    }
    if (t[id].add!=0)
    {
        t[id].sum+= (t[id].r-t[id].l+1)*t[id].add;
        t[id*2].add+=t[id].add;
        t[id*2+1].add+=t[id].add;
        t[id].add = 0;
    }
    int mid = (t[id].l+t[id].r)/2;
    if(mid>=end)
    find(id*2,start,end);
    else if(start>=mid+1)
    find(id*2+1,start,end);
    else
    {
        find(id*2,start,mid);
        find(id*2+1,mid+1,end);
    }
}

int main()
{
    int n,m;
    int i,j;
    char str[10];
    int start,end;
    __int64 num;
    while (scanf("%d%d",&n,&m)!=EOF)
    {
        for (i=1;i<=n;i++)
        {
            scanf("%I64d",&rr[i]);
        }
        build(1,1,n);
        for (i=0;i<m;i++)
        {
            scanf("%s",str);
            if (strcmp(str,"C")==0)
            {
                scanf("%d%d%I64d",&start,&end,&num);
                change(1,start,end,num);
            }
            else
            {
                scanf("%d%d",&start,&end);
                ans = 0;
                find(1,start,end);
                printf("%I64d\n",ans);
            }
        }
    }
    return 0;
}



别再纠结VS还是VSCode了!新手C#环境搭建保姆级指南(含.NET Core安装验证) 本文为C#新手提供Visual Studio与VS Code的深度对比及环境搭建指南,涵盖.NET Core安装验证、工具选择决策框架及实战配置技巧。帮助开发者根据项目需求选择合适工具,快速搭建高效开发环境,提升编码效率。 阅读详情

相关推荐

机器人导航学习历程(四)local planner

local planner   我们先来回顾一下Navigation的框架,可以看出位于红框中的local_planner是move_base节点的一部分,输入包括来自global_planner的全局的规划路径、里程计信息以及local_costmap的信息,输出是速度控制指令,作为控制器的输入。 base_local_planner   局部规划一般是用base_local_planner包...

yuniruchujian的博客 4412

OJ_数组去重_1176(附选择排序)

Description 现有一个非减序排序的一维数组,其中有若干元素是重复的。编程将重复元素删除掉若干个,仅保留1个,使数组中没有重复元素。 Input 输入有多行。第一行M>0,表示之后有M行输入。 之后的M行输入是若干个一维数组。每行的第一个数据0 Output 输出有M行,每行输出与上述M组输入一一对应,是其输入数组去重后的结果。输出的数据需按照递增序

知行合一 1861

Kettle实战:如何用JavaScript脚本实现数据库表批量操作(附完整代码)

本文详细介绍了如何利用Kettle的JavaScript脚本实现数据库表批量操作,包括表名采集、循环遍历和动态SQL生成等关键步骤。通过实战案例和完整代码示例,帮助ETL工程师高效处理数据密集型任务,提升数据库操作的自动化水平。

weixin_29019241的博客 231

专题一 Problem M

一、题目编号:            Problem M 二、简单题意:            输入两个数n,p,n^k=p,其中1 三、 四、感想            五、AC代码 #include #include  using namespace std; int main() {     double n,p;     while(cin>>n>>p)

ML_ACM的博客 393

【最全选型攻略-盘点篇】市面上有哪些靠谱的工业3D相机品牌?(双目、结构光、TOF、激光三角)

选工业3D相机,选最靠谱的品牌,选最Match你的产品,看这一篇就够了!

jiqishijueyingdi的博客 1万+

华为交换机、路由器配置静态路由实现不同网段通信

华为交换机、路由器配置静态路由实现不同网段通信。在主核心交换机上配置vlanif10 192.168.10.254/24,vlanif20 192.168.20.254/24,vlanif100 192.168.100.1/24,PC1:192.168.10.1能ping通PC2:192.168.20.1,也能ping通PC3:192.168.30.1,交换机和路由器使用静态路由。

星如雨落 6460

Problem M: 有多少个0

Problem M: 有多少个0 Time Limit: 1 Sec Memory Limit: 16 MB Description 求1*2*3*……*n的乘积以多少个0结尾。 Input 输入为多行,至EOF结束。每行为一个整数n,n<=100000。 Output 输出每个n对应的结尾0的个数。 Sample Input 10 100 1000 10000 Sample Output 2 24 249 2499 思路 思路来源:https://blog.youkuaiyun.com/weixi

千色千寻的博客 431

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1190

Gym - 101981 Problem M. Mediocre String Problem (扩展KMP + Manacher)

Problem M. Mediocre String Problem 题目链接:https://vjudge.net/problem/Gym-101981M 题目大意:给出两个串S,T,从S中选择 i~j 的子串,再从T中选择前缀 1~k 接在S的子串后面 组成一个新字符串,要求 j-i+1>k,问能构成的新串中是回文串的个数 思路:因为要求j-i+1>k,即S中选择的子串x比...

YOONGI 624

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 912

ICM20948 DMP代码详解(54)

ICM20948 DMP代码详解(54)

phmatthaus的专栏 424

Problem M. Walking Plan hdu6331(最短路)

Problem M. Walking Plan Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 375 Accepted Submission(s): 128 Problem Description There are ...

w571523631的博客 340

吉林大学数据库期末考试试卷讲解

给出几套期末真题及解析,给出复习建议。

一杯水果茶!足矣~ 3141

Problem M. Mediocre String Problem

Problem M. Mediocre String Problem(马拉车+拓展KMP) 题意:略(不知道题意还看题解?) 思路: 将S串翻转后进行操作,先用马拉车将S串每个字符为结尾时的回文个数计算出来也就是cnt[i],计算过程是利用差分。 再将翻转后的S与T进行拓展KMP求出LCP,最后直接累加乘积就行。 给个例子: S: bbabbaa T: bbaab S翻转后: aabbabb T不变:bbaab 拓kmp求完后,S串对应的extend[i] = {0, 0, 3, 1.

weixin_44134344的博客 468

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

贪心算法 Problem M 1012 已知幂和结果求底数

STL Problem M  Problem ID:1012  简单题意:给出n值和p值,求数值k,使得k的n次方等于p。 解题思路形成过程:利用pow()函数,从1到1000000000循环,找出k值。 感想:比较简单的一道水题,但是要注意看清题干,是求底数还是求幂。还要看清p的取值范围,从而确定定义时的类型。 代码:#incl

Heart. 的博客 1911

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

M - Matrix Problem

这道题目的意思就是给你一个矩阵q,这个矩阵的周围一圈都是'0', 然后让你写两个对应的矩阵a和b要求矩阵 q中为1的地方在a和b中都是1,然后剩下为零的地方a可以是1也可以是0, b中也可以是1也可以是0, 但是要求a和b如果在某处都为1,那么c中也为一, 换而言之就是q中是零的地方,a中可以是1, b可以是0, 或者a中为0, b中为1.要求最后a或者b中的1都是连通的。1.首先让a奇数行为0,偶数行为1,b反之。2.让a最左一列1,最右边一列为0,b反之。3.让c中为1的地方映射给a,b。

m0_73673533的博客 116

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Problem-M

概述:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。求某一年共有多少头牛。 思路:在前三年按照每年一头增加,从第四年开始,第四年生的牛对应第二年有的牛,第五年生的牛对应第三年有的牛,以此类推,fn = f3 + f1; f1 = f2;  //f1代表前3年 f2 = f3;  //f2代表前2年 f3 = fn;  //f3代表前1年。可解。

sdau-acm训练时代写下的博客 344

图算法—Problem M

图算法—Problem M 题意 有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X. 然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突。解题思路 (1)弄清题意,找出出现冲突的位置,判断冲突很简单: 就是当两个人在同一行坐同时, 他们到根节点的距离差值正好是他们之间的距离差值。如果和测试数据不同,此时就出现了冲突了。

ACM_Blog_WUCHAO 586

Matrix Problem(gym103118-M)

Matrix Problem

m0_73843712的博客 212

problem M

复杂度是n^2 感觉这样有点繁琐~ 和选择排序有点像。 #include int main(void) {     int t, array[15],  array_num, i, j, count;      array_num = 0;     count = 0;     while (1) {         scanf("%d", &t);        

lwk95240的博客 220

HDU problem m

Problem DescriptionThere is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 &amp;lt;= Ki &amp;lt;= N) on every floor.The lift have just two buttons: up and ...

Source_Roc 211
上一篇: Problem J
下一篇: topcoder 插件安装
翔蝈蝈
博客等级 码龄16年 25粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值