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

制作网页创建站点的步骤推广排名

制作网页创建站点的步骤,推广排名,高端企业网站建设好的公司,为什么要做营销型的网站建设2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1268 Solved: 502[Submit][Status][Discuss]Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:命令 参数限制 内…

2683: 简单题

Time Limit: 50 Sec  Memory Limit: 128 MB
Submit: 1268  Solved: 502
[Submit][Status][Discuss]

Description

你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:

 

 

命令

参数限制

内容

1 x y A

1<=x,y<=N,A是正整数

将格子x,y里的数字加上A

2 x1 y1 x2 y2

1<=x1<= x2<=N

1<=y1<= y2<=N

输出x1 y1 x2 y2这个矩形内的数字和

3

终止程序

Input

输入文件第一行一个正整数N。
接下来每行一个操作。

Output

对于每个2操作,输出一个对应的答案。

Sample Input

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

Sample Output

3
5

HINT

1<=N<=500000,操作数不超过200000个,内存限制20M。

对于100%的数据,操作1中的A不超过2000。

Source

显然这题不能树套树 原因自己看数据范围

那我们怎么做?

cdq分治

不过我还没有看懂到底是怎么个做法

反正肯定是这样的:

对时间分治,像归并排序一样考虑[l,mid]对[mid+1,r]的影响(问题1:如何处理影响?)

由于我们读入的时候肯定是x是连续的,所以我们一次可以处理很多询问(问题2:询问如何处理?)

所以我们最后只用维护一下树状数组就可以得到答案(问题3:为什么?)

这里先放上代码 明天我去问一下机房的大神得到这三个问题的答案

/*To The End Of The Galaxy*/
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<iomanip>
#include<stack>
#include<map>
#include<set>
#include<cmath>
#include<complex>
#define debug(x) cerr<<#x<<"="<<x<<endl
#define INF 0x7f7f7f7f
#define llINF 0x7fffffffffffll
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
inline int init()
{int now=0,ju=1;char c;bool flag=false;while(1){c=getchar();if(c=='-')ju=-1;else if(c>='0'&&c<='9'){now=now*10+c-'0';flag=true;}else if(flag)return now*ju;}
}
inline long long llinit()
{long long now=0,ju=1;char c;bool flag=false;while(1){c=getchar();if(c=='-')ju=-1;else if(c>='0'&&c<='9'){now=now*10+c-'0';flag=true;}else if(flag)return now*ju;}
}
int n,m;
struct node
{int t,x,y,d,id,v;
}query[2000005],tmpq[2000005];
int ans[2000005],s[2000005];
bool operator < (node a,node b)
{if(a.x!=b.x){return a.x<b.x;}else return a.y<b.y;
}
#define lowbit(x) (x&(-x))
void Add(int now,int v)
{for(int i=now;i<=n;i+=lowbit(i)){s[i]+=v;}
}
int Query(int now)
{int sum=0;for(int i=now;i>=1;i-=lowbit(i)){sum+=s[i];}return sum;
}
#define mid ((l+r)>>1)
void solve(int l,int r)
{if(l==r)return;solve(l,mid);solve(mid+1,r);int i=l,j=mid+1,last=0;while(j<=r){while(i<=mid&&query[i].t==2){i++;}while(j<=r&&query[j].t==1){j++;}if(i<=mid&&query[i].x<=query[j].x){Add(query[i].y,query[i].v);last=i;i++;}else if(j<=r)ans[query[j].id]+=Query(query[j].y),j++;}for(int i=l;i<=last;i++){if(query[i].t==1){Add(query[i].y,-query[i].v);}}merge(query+l,query+1+mid,query+1+mid,query+1+r,tmpq+l);for(int i=l;i<=r;i++){query[i]=tmpq[i];}return;
}
bool cmpid(node a,node b)
{return a.id<b.id;
}
int c[2000005],tot=0;
int main()
{n=init();int xl,xr,yl,yr,v,type;while(type=init(),type!=3){if(type==1){xl=init();yl=init();v=init();++m;query[m].x=xl;query[m].y=yl;query[m].v=v;query[m].t=type;query[m].id=m;}else if(type==2){c[++tot]=m;xl=init();yl=init();xr=init();yr=init();++m;query[m].id=m;query[m].x=xr;query[m].y=yr;query[m].t=type;++m;query[m].id=m;query[m].x=xl-1;query[m].y=yl-1;query[m].t=type;++m;query[m].id=m;query[m].x=xl-1;query[m].y=yr;query[m].t=type;++m;query[m].id=m;query[m].x=xr;query[m].y=yl-1;query[m].t=type;}}int p;solve(1,m);for(int i=1;i<=tot;i++){printf("%d\n",ans[c[i]+1]+ans[c[i]+2]-ans[c[i]+3]-ans[c[i]+4]);}return 0;
}
/*
srO xudyh davidlee1999WTK linkct1999 Orz
compiler TDM-GCC 5.9.2
*/
View Code

 UPD:

cdq分治是这样一种东西

首先我们将x1,x2,y1,y2的询问拆分成

[1,x1-1] 贡献为1

[1,y1-1] 贡献为1

[1,x2]贡献为-1

[1,y1-1]贡献为-1

[1,x1-1]贡献为-1

[1,y2]贡献为-1

……

画个图直观显示一下 就是这样

我们将一个查询分成了四个 然后是用树状数组维护

然后对时间分治,由于分治的思想我们自然能保证所有的[l,mid]的询问都已经处理过了,且所有[mid+1,r]的修改都已经处理过了

现在我们考虑如何合并

首先我们最后要将这些东西按照x轴归并 这是显然的 不然我们无法保证顺序

那么我们实际上维护了三维偏序集

所以说,我们这样做

我们像归并排序那样维护twopointer,由于我们[l,mid]中的修改,x必然是连续的,[mid+1,r]中的修改,x也必然是连续的

我们就只剩下y轴要考虑了,我们对y轴维护前缀和,具体来说我们用树状数组/线段树维护

由于我们这个时候已经是既按照时间顺序又按照x轴顺序了,那么我们从l到mid的过程中,我们只要看一下右边的x是否还有贡献

 大概就是这样……我也不是特别懂

转载于:https://www.cnblogs.com/redwind/p/6503642.html

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

相关文章:

  • 网站建设管理岗位职责推广的公司
  • 学做网站论坛教学视频下载app营销推广方案
  • 深圳最大的招聘网站是什么爱站数据官网
  • 网站优化公司开始上班了合肥推广外包公司
  • 30多了学网站建设晚吗广告大全
  • easyui做的网站旺道seo系统
  • 技术支持 东莞网站建设防水工程新媒体培训
  • 重庆公司网站 技术支持企业全网推广
  • 河北建设银行石家庄分行招聘网站小红书seo关键词优化多少钱
  • 香河做网站shijuewang关键词批量调词软件
  • 做产品表情的网站外链发布网站
  • 做西服的网站成都网站排名 生客seo
  • 购物网站怎么做优化网站站长seo推广
  • 电子商务网站的设计网络营销方式包括哪些
  • 网站域名行业动态搜索引擎营销的6种方式
  • 网站的彩色标签怎么做的seo超级外链
  • ps网站建设目标推广文案范例
  • 中国能源建设集团招聘网站关键词优化营销
  • 二维码图片seo精华网站
  • 做网站多少钱特惠西宁君博s百度广告太多
  • 杭州论坛网seo是什么意思 seo是什么职位
  • 禅城区网站建设公司营销组合策略
  • 做网站多少钱_西宁君博优选长沙官网seo收费标准
  • 网站内页权重佛山网站建设维护
  • 网站首页的重要性免费网站代理访问
  • 网站建设项目技术seo排名优化点击软件有哪些
  • 做图标得英文网站外贸推广代理
  • 如何用front怕个做网站搜索引擎营销特点
  • 网站开发的运行可行性seo网站优化培训怎么样
  • 没有英文网站怎么做外贸厦门seo网络优化公司
  • C语言:20250728学习(指针)
  • java设计模式 -【责任链模式】
  • C++算法竞赛篇(六)一维数组题型讲解
  • kali [DNS劫持] 实验(详细步骤)
  • 3020雕刻机脱机自定义指令
  • python基础:request模块简介与安装、基本使用,如何发送get请求响应数据,response属性与请求头