poj 4047 Garden
来源:互联网 发布:麦子金服怎么样 知乎 编辑:程序博客网 时间:2024/05/22 09:38
金华邀请赛的题,可惜现场赛我sb了,没想出来,还是队友想的……还是要不断的练习呀,隔断时间不练习就不会了
#include <cstdlib>
#include <iostream>#include <cstdio>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=222222;
int d[4*maxn],n,k,v[maxn],sum[maxn],co[4*maxn],val[maxn];
void make(int l,int r,int rt)
{
co[rt]=0;
if(l==r)
{
if(l<k) d[rt]=-99999999;
else d[rt]=sum[r]-sum[r-k];
val[l]=d[rt];
// cout<<rt<<" "<<d[rt]<<" "<<l<<" "<<r<<endl;
return;
}
int m=(l+r)>>1;
make(lson);
make(rson);
d[rt]=max(d[rt<<1],d[rt<<1|1]);
//cout<<rt<<" "<<d[rt]<<" "<<l<<" "<<r<<endl;
}
void pushdown(int rt)
{
if(co[rt]!=0)
{
co[rt<<1]+=co[rt];
co[rt<<1|1]+=co[rt];
d[rt<<1]+=co[rt];
d[rt<<1|1]+=co[rt];
co[rt]=0;
}
}
void insert(int L,int R,int val,int l,int r,int rt)
{
if(L<=l&&R>=r)
{
co[rt]+=val;d[rt]+=val;return;
}
pushdown(rt);
int m=(l+r)>>1;
if(L<=m) insert(L,R,val,lson);
if(R>m) insert(L,R,val,rson);
d[rt]=max(d[rt<<1],d[rt<<1|1]);
}
int query(int L,int R,int l,int r,int rt)
{
if(L<=l&&R>=r) return d[rt];
pushdown(rt);
int m=(l+r)>>1;
int ans1=-99999999,ans2=-99999999;
if(L<=m) ans1=query(L,R,lson);
if(R>m) ans2=query(L,R,rson);
return max(ans1,ans2);
}
int main(int argc, char *argv[])
{
int ca,m,id,a,b;
scanf("%d",&ca);
while(ca--)
{
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
sum[0]=0;
for(int i=1;i<=n;i++)
sum[i]=sum[i-1]+v[i];
make(1,n,1);
// for(int i=1;i<=n;i++)
// cout<<val[i]<<" ";
cout<<endl;
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&id,&a,&b);
if(id==0) insert(a,a+k-1,b-v[a],1,n,1),v[a]=b;
else if(id==1)
{
insert(a,a+k-1,v[b]-v[a],1,n,1);
insert(b,b+k-1,v[a]-v[b],1,n,1);
int pre=v[a];
v[a]=v[b];
v[b]=pre;
}
else
printf("%d\n",query(a+k-1,b,1,n,1));
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
/*
12
5 7 3
-1 2 -4 6 1
2 1 5
2 1 3
1 2 1
2 1 5
2 1 4
0 2 4
2 1 5
*/
- poj 4047 Garden
- POJ 4047 Garden
- POJ 4047: Garden
- POJ 4047 Garden
- POJ 4047 Garden 线段树
- POJ 4047 Garden 解题报告
- POJ 4047 Garden (线段树)
- Poj 4047 Garden /2012金华邀请赛D题(线段树)
- poj 4047 Garden 2012金华邀请赛 线段树
- POJ - 4047 Garden(线段树成段更新,查询最值)
- POJ【4047】——Problem D. Garden 线段树
- POJ 3102 Bee Garden 笔记
- Garden
- poj 4047 Garden 2012金华赛区 (成段更新+区间最值)
- poj 4047 Garden(线段树,伤!12年金华邀请赛D题)
- poj 4047 Garden 线段树lazy标记与成段更新
- POJ 4047 Garden (线段树 - 区间增减、区间查询) -- 解题报告
- PKU 4047 - Garden(线段树 + 区间修改)
- 12周任务4
- android 百度地图长按弹出气泡 popupWindow
- 有关前端设计
- NFS启动根文件系统
- jqGrid 各种参数 详解
- poj 4047 Garden
- xml/2
- 《一步一脚印 90后程序员》8
- MySQL数据库中的Date,DateTime和TimeStamp类型详解
- 娱乐:) ubuntu 下修改 chrome 背景颜色
- Extjs + java + ibatis 具有搜索功能的分页组件
- sixth sense之硬件组成
- 第十一章
- 文件系统开发手记-第1篇 文件系统开发的八大苦处