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

徐州集团网站建设方案/网络营销的特点和优势

徐州集团网站建设方案,网络营销的特点和优势,万网客服电话,自己开发的软件如何赚钱Description Input Output 若干行,每行一个整数,表示对一个问题的回答。请按照输入中的顺序依次给出回答。 Sample Input 5 1 3 -1 -4 7 2 A 2 4 -1 5 B 1 5 Sample Output 2 Solution 差分然后线段树维护,对于修改操作,第一个和最…

Description

img

Input

img

Output

若干行,每行一个整数,表示对一个问题的回答。请按照输入中的顺序依次给出回答。

Sample Input

5
1
3
-1
-4
7
2
A 2 4 -1 5
B 1 5

Sample Output

2

Solution

差分然后线段树维护,对于修改操作,第一个和最后一个单独改,中间一段区间加就好了。

然后就是恶心到爆炸的询问。。

对于每个区间,记录\(s[0/1/2/3]\),分别表示左右端点都不取,只取左端点,只取右端点,都取的最小段数。

由于合并时,每种情况都类似,这里只讲\(s[0]\)的更新。

考虑现在要合并\((l,mid),(mid+1,r)\),由于这是个差分数组,所以原序列可以看作是在两个值之间,然后考虑\(mid\)\(mid+1\)之间这个数的去向:

  • 和前面合并,即ans.s[0]=min(ans.s[0],x.s[2]+y.s[0]);,其中\(ans\)为合并后的信息,现在要合并\(x,y\)
  • 和后面合并,即ans.s[0]=min(ans.s[0],x.s[0]+y.s[1]);
  • 同时和两边合并,即ans.s[0]=min(ans.s[0],x.s[2]+y.s[1]-(x.r==y.l));,其中\(l\)为最左边的差分值,\(r\)同理。

具体细节自己注意下就好了。

#include<bits/stdc++.h>
#define ll long long 
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}const int maxn = 2e5+10;int n;
struct node {int s[4];ll l,r;};#define ls p<<1
#define rs p<<1|1
#define mid ((l+r)>>1)int a[maxn];node operator + (const node &x,const node &y) {node ans;ans.l=x.l,ans.r=y.r;ans.s[0]=min(x.s[2]+y.s[1]-(x.r==y.l),min(x.s[2]+y.s[0],x.s[0]+y.s[1]));ans.s[1]=min(x.s[3]+y.s[1]-(x.r==y.l),min(x.s[1]+y.s[1],x.s[3]+y.s[0]));ans.s[2]=min(x.s[2]+y.s[3]-(x.r==y.l),min(x.s[0]+y.s[3],x.s[2]+y.s[2]));ans.s[3]=min(x.s[3]+y.s[3]-(x.r==y.l),min(x.s[3]+y.s[2],x.s[1]+y.s[3]));return ans;
}struct Segment_Tree {node tr[maxn<<2];int tag[maxn<<2];void push_tag(int p,int v) {tr[p].l+=v,tr[p].r+=v,tag[p]+=v;}void pushdown(int p) {if(!tag[p]) return ;push_tag(ls,tag[p]),push_tag(rs,tag[p]);tag[p]=0;}void modify(int p,int l,int r,int x,int y,int v) {if(x<=l&&r<=y) return push_tag(p,v),void();pushdown(p);if(x<=mid) modify(ls,l,mid,x,y,v);if(y>mid) modify(rs,mid+1,r,x,y,v);tr[p]=tr[ls]+tr[rs];}node query(int p,int l,int r,int x,int y) {if(x<=l&&r<=y) return tr[p];pushdown(p);node ans;if(y<=mid) return ans=query(ls,l,mid,x,y);else if(x>mid) return ans=query(rs,mid+1,r,x,y);else return ans=query(ls,l,mid,x,y)+query(rs,mid+1,r,x,y);tr[p]=tr[ls]+tr[rs];return ans;}void build(int p,int l,int r) {if(l==r) {tr[p].s[1]=tr[p].s[2]=tr[p].s[3]=1;tr[p].s[0]=0;tr[p].l=tr[p].r=a[l+1]-a[l];return ;}build(ls,l,mid),build(rs,mid+1,r),tr[p]=tr[ls]+tr[rs];}
}SGT;signed main() {read(n);for(int i=1;i<=n;i++) read(a[i]);SGT.build(1,1,n-1);int q;read(q);while(q--) {char s[4];int x,y,A,b;scanf("%s",s+1);read(x),read(y);if(s[1]=='A') {read(A),read(b);if(x>1) SGT.modify(1,1,n-1,x-1,x-1,A);if(y<n) SGT.modify(1,1,n-1,y,y,-A-(y-x)*b);if(x<y) SGT.modify(1,1,n-1,x,y-1,b);} else {if(x==y) puts("1");else write(SGT.query(1,1,n-1,x,y-1).s[3]);}}return 0;
}

转载于:https://www.cnblogs.com/hbyer/p/10184216.html

http://www.lbrq.cn/news/1573021.html

相关文章:

  • ppt做的最好的网站有哪些/合肥网站制作
  • 电子商务网站建设主要内容/百度注册网站
  • 建什么网站可以赚钱/河南网站建站推广
  • 网站怎么做百度百科/网站友链查询接口
  • 广州网站建设找新际/企业网站推广方法实验报告
  • 网站添加qq在线客服/网站搜索引擎优化的基本内容
  • 给视频做特效的网站/网站运营及推广方案
  • 做的比较好的法律实务培训网站/百度推广销售员好做吗
  • 网站需要多少钱/如何自建网站?
  • 正规网站建设团队是什么/网站seo关键词优化
  • 个人网页设计作品简约/广州排前三的seo公司
  • java 就是做网站的吗/上海网站推广广告
  • 网站换了服务器/网站优化塔山双喜
  • 网站图片加载 优化/品牌营销平台
  • 自己做企业网站/找谁做百度关键词排名
  • 排名优化网站/搜索引擎营销的主要方式有
  • 网站开发原始数据/强力搜索引擎
  • 手机网站 wap/宁波网站快速优化
  • 赣州网上立案网址/上海关键词优化的技巧
  • 北京网站开发公司哪家好/互联网营销师有什么用
  • 邵阳做网站哪家好/百度电话怎么转人工
  • ddns做网站/新浪博客seo
  • 电商网站开发的项目描述/建站为应用技术
  • 出售网站建设群/今日热榜
  • 自己切片做网站/seo营销工具
  • wordpress搜索页面怎么仿/搜索引擎优化概述
  • 网站建设费无形资产摊销/百度软件
  • WordPress5更改logo/seo排名优化联系13火星软件
  • 北京移动端网站建设/seo关键词排名优
  • 为什么要学电商网站建设/百度新闻头条新闻
  • 基于Java的Markdown转Word工具(标题、段落、表格、Echarts图等)
  • [系统架构]系统架构基础知识(一)
  • 面试实战 问题二十九 Java 值传递与引用传递的区别详解
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-会议记录
  • archlinux中VLC无法播放视频的解决办法
  • C语言—数组和指针练习题合集(二)