Arrangement for Contests UVALive - 8519
2018-03-20 12:52
281 查看
点击打开链接
贪心的思想 线段树操作
每次取区间最小值 然后拿掉这个最小值 并不影响区间内非最小值的匹配#include <bits/stdc++.h>
using namespace std;
#define N 0x3f3f3f3f
struct node1
{
int l;
int r;
int minn;
int pos;
int laz;
};
struct node2
{
int minn;
int pos;
};
node1 tree[400010];
int n,p;
void pushup(int cur)
{
if(tree[2*cur].minn<tree[2*cur+1].minn)
{
tree[cur].minn=tree[2*cur].minn;
tree[cur].pos=tree[2*cur].pos;
}
else
{
tree[cur].minn=tree[2*cur+1].minn;
tree[cur].pos=tree[2*cur+1].pos;
}
return;
}
void pushdown(int cur)
{
if(tree[cur].laz!=0)
{
tree[2*cur].minn-=tree[cur].laz;
tree[2*cur].laz+=tree[cur].laz;
tree[2*cur+1].minn-=tree[cur].laz;
tree[2*cur+1].laz+=tree[cur].laz;
tree[cur].laz=0;
}
return;
}
void build(int l,int r,int cur)
{
int m;
tree[cur].l=l;
tree[cur].r=r;
tree[cur].minn=N;
tree[cur].pos=-1;
tree[cur].laz=0;
if(l==r)
{
scanf("%d",&tree[cur].minn);
tree[cur].pos=l;
return;
}
m=(l+r)/2;
build(l,m,2*cur);
build(m+1,r,2*cur+1);
pushup(cur);
return;
}
node2 query(int pl,int pr,int cur)
{
node2 res,tem;
if(pl<=tree[cur].l&&tree[cur].r<=pr)
{
res.minn=tree[cur].minn;
res.pos=tree[cur].pos;
return res;
}
res.minn=N,res.pos=-1;
if(pl<=tree[2*cur].r)
{
tem=query(pl,pr,2*cur);
if(res.minn>tem.minn) res=tem;
}
if(pr>=tree[2*cur+1].l)
{
tem=query(pl,pr,2*cur+1);
if(res.minn>tem.minn) res=tem;
}
return res;
}
void update(int pl,int pr,int val,int cur)
{
if(pl<=tree[cur].l&&tree[cur].r<=pr)
{
tree[cur].minn-=val;
tree[cur].laz+=val;
return;
}
pushdown(cur);
if(pl<=tree[2*cur].r) update(pl,pr,val,2*cur);
if(pr>=tree[2*cur+1].l) update(pl,pr,val,2*cur+1);
pushup(cur);
return;
}
int main()
{
node2 tem;
int t,k,ans;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
build(1,n,1);
ans=0;
p=1;
while(p+k-1<=n)
{
tem=query(p,p+k-1,1);
ans+=tem.minn;
update(p,p+k-1,tem.minn,1);
p=tem.pos+1;
}
printf("%d\n",ans);
}
return 0;
}
贪心的思想 线段树操作
每次取区间最小值 然后拿掉这个最小值 并不影响区间内非最小值的匹配#include <bits/stdc++.h>
using namespace std;
#define N 0x3f3f3f3f
struct node1
{
int l;
int r;
int minn;
int pos;
int laz;
};
struct node2
{
int minn;
int pos;
};
node1 tree[400010];
int n,p;
void pushup(int cur)
{
if(tree[2*cur].minn<tree[2*cur+1].minn)
{
tree[cur].minn=tree[2*cur].minn;
tree[cur].pos=tree[2*cur].pos;
}
else
{
tree[cur].minn=tree[2*cur+1].minn;
tree[cur].pos=tree[2*cur+1].pos;
}
return;
}
void pushdown(int cur)
{
if(tree[cur].laz!=0)
{
tree[2*cur].minn-=tree[cur].laz;
tree[2*cur].laz+=tree[cur].laz;
tree[2*cur+1].minn-=tree[cur].laz;
tree[2*cur+1].laz+=tree[cur].laz;
tree[cur].laz=0;
}
return;
}
void build(int l,int r,int cur)
{
int m;
tree[cur].l=l;
tree[cur].r=r;
tree[cur].minn=N;
tree[cur].pos=-1;
tree[cur].laz=0;
if(l==r)
{
scanf("%d",&tree[cur].minn);
tree[cur].pos=l;
return;
}
m=(l+r)/2;
build(l,m,2*cur);
build(m+1,r,2*cur+1);
pushup(cur);
return;
}
node2 query(int pl,int pr,int cur)
{
node2 res,tem;
if(pl<=tree[cur].l&&tree[cur].r<=pr)
{
res.minn=tree[cur].minn;
res.pos=tree[cur].pos;
return res;
}
res.minn=N,res.pos=-1;
if(pl<=tree[2*cur].r)
{
tem=query(pl,pr,2*cur);
if(res.minn>tem.minn) res=tem;
}
if(pr>=tree[2*cur+1].l)
{
tem=query(pl,pr,2*cur+1);
if(res.minn>tem.minn) res=tem;
}
return res;
}
void update(int pl,int pr,int val,int cur)
{
if(pl<=tree[cur].l&&tree[cur].r<=pr)
{
tree[cur].minn-=val;
tree[cur].laz+=val;
return;
}
pushdown(cur);
if(pl<=tree[2*cur].r) update(pl,pr,val,2*cur);
if(pr>=tree[2*cur+1].l) update(pl,pr,val,2*cur+1);
pushup(cur);
return;
}
int main()
{
node2 tem;
int t,k,ans;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
build(1,n,1);
ans=0;
p=1;
while(p+k-1<=n)
{
tem=query(p,p+k-1,1);
ans+=tem.minn;
update(p,p+k-1,tem.minn,1);
p=tem.pos+1;
}
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- UVaLive 6609 Meeting Room Arrangement (贪心,区间不相交)
- UVALive 6919 A game for kids
- UESTC889&&uvalive6623 Battle for Silver(dfs)
- UVALive 6919 A game for kids(树形dp)
- Maze For Robot - UVaLive 4040 dp
- uvalive 7480 Association for Control Over Minds
- UVALive 6606 Meeting Room Arrangement 【搜索】
- UVaLive 6623 Battle for Silver (最大值,暴力)
- UVALive 6117 (LA 6117) Pole Arrangement 动态规划
- UVALive 6187_Never Wait for Weights(带权并查集)
- UVALive - 7484 Association for the Country of Mububa(dp)
- G - Meeting Room Arrangement UVALive - 6606——动态规划
- UVALive 6187 Never Wait for Weights(并查集)
- UVALive_6606_Meeting Room Arrangement(最大独立集)
- UVAlive 6623 Battle for Silver(暴力+思路)
- POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)
- 例题1.22 最大子矩阵 City Game UVALive - 3029 扫描法
- UVA10010使用数组和一个for循环控制前进路径方向不变
- UVALive-7297-Hounded by Indecision
- UVa 11384 Help is needed for Dexter——思路题