HDU-2795-Billboard
http://acm.hdu.edu.cn/showproblem.php?pid=2795
线段树,建树时要注意范围
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
#define N 200005
int h,w;
struct cam
{
int x;
int y;
int len;
}list[N*4];
int Max(int x,int y)
{
return x>y?x:y;
}
void build(int k,int x,int y)
{
list[k].x=x;
list[k].y=y;
list[k].len=w;
if(x==y)
return;
int mid=(x+y)/2;
build(k<<1,x,mid);
build(k<<1|1,mid+1,y);
}
void find(int k,int x)
{
if(list[k].len>=x)
{
if(list[k].x==list[k].y)
{
list[k].len-=x;
printf("%d\n",list[k].x);
return;
}
else if(list[2*k].len>=x)
{
find(k<<1,x);
list[k].len=Max(list[k<<1].len,list[k<<1|1].len);
}
else
{
find(k<<1|1,x);
list[k].len=Max(list[k<<1].len,list[k<<1|1].len);
}
}
else
printf("-1\n");
}
int main()
{
int t,k;
while(scanf("%d%d%d",&h,&w,&t)!=EOF)
{
if(h<N)
build(1,1,h);
else
build(1,1,N); //不需要管h,大于n的不会被贴到
while(t--)
{
scanf("%d",&k);
find(1,k);
}
}
return 0;
}
分享到:
相关推荐
hdu-acm源代码(上百题)hdu-acm源代码、hdu-acm源代码hdu-acm源代码
算法-数塔(HDU-2084).rar
算术(HDU-6715).rar
算法-确定比赛名次(HDU-1285).rar
最短路(HDU-2544).rar
算法-命运(HDU-2571)(包含源程序).rar
算法-连连看(HDU-1175)(包含源程序).rar
算法-欧拉回路(HDU-1878)(包含源程序).rar
算法-六度分离(HDU-1869)(包含源程序).rar
算法-排列2(HDU-1716)(包含源程序).rar
算法-迷宫城堡(HDU-1269)(包含源程序).rar
算法-免费馅饼(HDU-1176)(包含源程序).rar