当前位置: 首页 > wzjs >正文

wordpress 菜单 数据库廊坊seo

wordpress 菜单 数据库,廊坊seo,做企业网站什么软件好,商务网站规划与建设的目的文章目录 题目 P3372 【模板】线段树 1题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示代码技术细节 题目 P3372 【模板】线段树 1 题目描述 如题,已知一个数列 { a i } \{a_i\} {ai​},你需要进行下面两种操作: 将某…

文章目录

    • 题目
  • P3372 【模板】线段树 1
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
    • 代码
    • 技术细节

题目

P3372 【模板】线段树 1

题目描述

如题,已知一个数列 { a i } \{a_i\} {ai},你需要进行下面两种操作:

  1. 将某区间每一个数加上 k k k
  2. 求出某区间每一个数的和。

输入格式

第一行包含两个整数 n , m n, m n,m,分别表示该数列数字的个数和操作的总个数。

第二行包含 n n n 个用空格分隔的整数 a i a_i ai,其中第 i i i 个数字表示数列第 i i i 项的初始值。

接下来 m m m 行每行包含 3 3 3 4 4 4 个整数,表示一个操作,具体如下:

  1. 1 x y k:将区间 [ x , y ] [x, y] [x,y] 内每个数加上 k k k
  2. 2 x y:输出区间 [ x , y ] [x, y] [x,y] 内每个数的和。

输出格式

输出包含若干行整数,即为所有操作 2 的结果。

输入输出样例 #1

输入 #1

5 5
1 5 4 2 3
2 2 4
1 2 3 2
2 3 4
1 1 5 1
2 1 4

输出 #1

11
8
20

说明/提示

对于 15 % 15\% 15% 的数据: n ≤ 8 n \le 8 n8 m ≤ 10 m \le 10 m10
对于 35 % 35\% 35% 的数据: n ≤ 10 3 n \le {10}^3 n103 m ≤ 10 4 m \le {10}^4 m104
对于 100 % 100\% 100% 的数据: 1 ≤ n , m ≤ 10 5 1 \le n, m \le {10}^5 1n,m105 a i , k a_i,k ai,k 为正数,且任意时刻数列的和不超过 2 × 10 18 2\times 10^{18} 2×1018

【样例解释】

代码

#include <bits/stdc++.h>
#define ll long long int 
#define maxn 100001
using namespace std;
struct Tree{ll l,r,d;//节点区间//区间和 
}node[maxn<<2];//第几个节点 
int n,//n个数 m,//m个操作x;//操作数 
ll	s,t,//区间lazy[maxn<<2],//懒信息 d[maxn],//序列 k;//加到区间的数 
void build(int x,ll l,ll r){//建立线段树 node[x].l=l,node[x].r=r;if(l==r){node[x].d=d[l];return;}ll mid=l+r>>1;build(x<<1,l,mid);build(x<<1|1,mid+1,r);node[x].d=node[x<<1].d+node[x<<1|1].d;
}
void update(int x){//处理懒信息 if(lazy[x]==0)return;//没有懒信息 ll mid=node[x].r+node[x].l>>1;//一个是节点序号,一个是区间 node[x<<1].d+=(mid-node[x].l+1)*lazy[x];	lazy[x<<1]+=lazy[x];//左区间懒信息的更新 node[x<<1|1].d+=(node[x].r-mid)*lazy[x];	lazy[x<<1|1]+=lazy[x];//右区间懒信息更新 lazy[x]=0;//处理后清零 
}
ll find(int x,ll l,ll r,ll left,ll right){//找到区间和 if(l>=left&&r<=right)return node[x].d;//是该区间 update(x);//找区间过程处理懒信息 ll mid=l+r>>1,he=0;if(left<=mid)he+=find(x<<1,l,mid,left,right);//左区间 if(mid<right)he+=find(x<<1|1,mid+1,r,left,right);//右区间 return he; //左右区间之和 
}
void add(int x,ll l,ll r,ll left,ll right,ll k){//给区间加k,就是(r-l+1)*k if(l>=left&&r<=right){//在区间内就加 node[x].d+=(r-l+1)*k;lazy[x]+=k;return;}update(x);//明确区间的过程,顺带解决前面留下的懒信息 ll mid=l+r>>1;if(left<=mid)add(x<<1,l,mid,left,right,k);if(mid<right)add(x<<1|1,mid+1,r,left,right,k);node[x].d=node[x<<1].d+node[x<<1|1].d;//重新计算每个节点的区间和=左右区间的和 
}
void view(int s,int t,string ss,int k){cout<<s<<"到"<<t<<"\t"<<ss<<k<<endl; queue<int> q1,q2;q1.push(1);while(!q1.empty()){int x;while(!q1.empty()){x=q1.front();q1.pop();if(x==0||node[x].l==0||node[x].r==0){cout<<endl;return;}cout<<x<<"("<<node[x].l<<","<<node[x].r<<")"<<node[x].d<<","<<lazy[x]<<"\t";q2.push(x<<1),q2.push(x<<1|1);}cout<<endl;while(!q2.empty()){x=q2.front();q2.pop();q1.push(x);}}cout<<endl;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++)cin>>d[i];build(1,1,n);//view(0,0,"开始",0);for(int i=1;i<=m;i++){cin>>x>>s>>t;if(x==2){cout<<find(1,1,n,s,t)<<endl;//view(s,t,"find",k);}else if(x==1){cin>>k;add(1,1,n,s,t,k);//view(s,t,"add",k);}}//view(0,0,"结束",0);return 0;
}

技术细节

1.分清节点序号和区间
2.注意输入数据范围a、i 、k 为正数,且任意时刻数列的和不超过 2×10
18 。正数,小于2*10^8,必须用long long int。

http://www.dtcms.com/wzjs/438810.html

相关文章:

  • 企业官网和小程序的商城版本的区别seo导航
  • 青岛有没有专门做淘宝网站惠州网络营销公司
  • 网站咨询聊天怎么做打开免费百度啊
  • 不收费的企业查询网站免费seo网站推广在线观看
  • asp.net网站搬迁到移动终端房地产销售技巧和话术
  • 最专业网站建设公司怎么优化整站
  • 服务器租用网站模版代理广告投放平台
  • 建设购物网站流程公司推广方案
  • 高校网站建设资料库百度网络营销中心客服电话
  • 汶上手机网站建设自己做一个网站
  • php如何自学做网站营销策划书范文案例
  • 网站备案要幕布泰州百度seo公司
  • 淘宝网页设计模板图片seo平台
  • 做响应式网站设计师如何布局呢广州市口碑seo推广
  • 网页设计与网站建设入门到精通广东疫情最新情况
  • 网站建设税点网站seo优化皆宣徐州百都网络不错
  • 永久免费网站推荐google搜索免费入口
  • 建立学校网站网络推广要求
  • 国外做兼职的网站有哪些网站收录怎么弄
  • 常州网站制作公司排名指数函数图像
  • 服装网站怎么做的违禁网站用什么浏览器
  • 广州英文网站制作baiduseoguide
  • 州网站建设网络营销的营销理念
  • 购物网站论文优化seo是什么意思
  • 广州建设网站是什么样的搭建一个app平台要多少钱
  • 咸宁市住房和城乡建设委员会网站网络卖货平台有哪些
  • wp网站打开太慢怎么做优化电商网站设计模板
  • 重庆没建网站的企业最新的销售平台
  • 网站通栏代码知乎推广优化
  • 湖南微信网站公司重庆做seo外包的