1081 线段树练习 2

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 大师 Master
 
 
 
题目描述 Description

给你N个数,有两种操作

1:给区间[a,b]的所有数都增加X

2:询问第i个数是什么?

输入描述 Input Description

第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,表示操作的个数. 接下来Q行每行若干个整数。如果第一个数是1,后接3个正整数a,b,X,表示在区间[a,b]内每个数增加X,如果是2,后面跟1个整数i, 表示询问第i个位置的数是多少。

输出描述 Output Description

对于每个询问输出一行一个答案

样例输入 Sample Input

3

1

2

3

2

1 2 3 2

2 3

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

数据范围

1<=n<=100000

1<=q<=100000

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 400010
using namespace std;
int x,y,z,p,n,m,ans;
int read()
{
    ,f=; char ch=getchar();
    ; ch=getchar();}
    +ch-'; ch=getchar();}
    return x*f;
}
struct noid
{
    int l,r,w,f;
}tree[N];
void build(int l,int r,int k)
{
    tree[k].l=l,tree[k].r=r;
    if(l==r)
    {
        x=read(),tree[k].w=x;
        return ;
    }
    ;
    build(l,m,k<<),build(m+,r,(k<<)+);
    tree[k].w].w+tree[(k<<)+].w;
}
void down(int k)
{
    tree[k<<].f+=tree[k].f;
    tree[(k<<)+].f+=tree[k].f;
    tree[k<<].w+=(tree[k<<].r-tree[k<<].l+)*tree[k].f;
    tree[(k<<)+].w)+].r-tree[(k<<)+].l+)*tree[k].f;
    tree[k].f=;
}
void add(int k)
{
    if(tree[k].l>=x&&tree[k].r<=y)
    {
        tree[k].w+=(tree[k].r-tree[k].l+)*z;
        tree[k].f+=z;
        return ;
    }
    if(tree[k].f) down(k);
    ;
    );
    )+);
    tree[k].w=tree[k<<].w+tree[(k<<)+].w;
}
void ask(int k)
{
    if(tree[k].l==tree[k].r)
    {
        ans=tree[k].w;
        return ;
    }
    if(tree[k].f) down(k);
    ;
    );
    )+);
}
int main()
{
    n=read();build(,n,);
    m=read();
    while(m--)
    {
        p=read();
        ){x=read(),y=read(),z=read(),add();}
        ),printf("%d\n",ans);}
    }
    ;
}

最新文章

  1. C#中获取当前时间:System.DateTime.Now.ToString()用法
  2. java java.lang.NoClassDefFoundError 的解决办法
  3. React(JSX语法)----动态UI
  4. Office Online简介
  5. [转载]Nginx如何处理一个请求
  6. 减肥App计划
  7. HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事
  8. HTML_常见命令学习笔记
  9. [转]Linux下转换字符集(UTF8转换)
  10. Python学习笔记——基础篇【第七周】———进程、线程、协程篇(socket基础)
  11. Mysql group by,order by,dinstict优化
  12. jquery制作移动端菜单栏左右滑动
  13. python3用BeautifulSoup抓取id=&#39;xiaodeng&#39;,且正则包含‘elsie’的标签
  14. nodejs 负载均衡
  15. C#调用C++ DLL的方式
  16. WPF样式动画Trigger.EnterActions和Trigger.ExitActions(ExitActions其实可以不做任何事情)
  17. ubuntu16.04 安装opencv3
  18. hdu 1423(LCS+LIS)
  19. ORACL EXP导出数据说明
  20. UITableView分隔线

热门文章

  1. 安装JPype时出现的 Unable to find vcvarsall.bat
  2. CCF|碰撞的小球
  3. greenplum4.3.8.2安装
  4. Katalon Studio 安装 配置 简单使用
  5. 迅为iTOP-4418开发板串口虚拟控制台配置为普通串口
  6. 【转帖】迅为iTOP-iMX6开发板 Ubuntu系统下WiFi模块mt6620的移植
  7. jQuery 点击 星星评分
  8. Windows:32位程序运行在64位系统上注册表会重定向
  9. No-4.变量的基本使用
  10. ios中摄像头/相册获取图片压缩图片上传服务器方法总结