- 论坛徽章:
- 0
|
#include<iostream>
#include<cstdio>
using namespace std;
#define Max 200001
struct data
{
int l,r,max;
}node[3*Max];
int w;
int max(int a,int b)
{
return a>b? a:b;
}
void BuildTree(int left,int right,int u)
{
node.l=left;
node.r=right;
if(left==right)
{
node.max=w;
}
else
{
BuildTree(left,(left+right)>>1,2*u);
BuildTree(((left+right)>>1)+1,right,2*u+1);
node.max=w;
}
}
int Update(int val,int u)
{
int s;
if(node.max>=val)
{
if(node.l==node.r)
{
node.max-=val;
s=node.l;
cout<<s<<endl<<endl;;
return s;//为什么return的s值和上面的cout出s的值不一样呢?
}
else if(node[2*u].max>=val)
{
Update(val,2*u);
node.max=max(node[2*u].max,node[2*u+1].max);
}
else
{
Update(val,2*u+1);
node.max=max(node[2*u].max,node[2*u+1].max);
}
}
else
{
//printf("-1\n");
s=-1;
//return -1;
}
}
int main()
{
int h,n,i,wi,ss;
while(~scanf("%d%d%d",&h,&w,&n))
{
if(h>200000)
BuildTree(1,200001,1);
else
BuildTree(1,h,1);
for(i=0;i<n;i++)
{
scanf("%d",&wi);
ss=Update(wi,1);
cout<<ss<<endl;
}
}
return 0;
} |
|