以h建树,不过要注意,当h>n时只需要1-n就够了
简单线段树,维护区间最大值
#include<iostream>
#define maxn 222222
using namespace std;
struct stu
{
int left,right,max;
};
stu mapp[maxn*4];
int n,m,t,x;
void build(int l,int r,int count)
{
mapp[count].left=l;
mapp[count].right=r;
mapp[count].max=m;
if(l==r) return;
int mid=(l+r)/2;
build(l,mid,count*2);
build(mid+1,r,count*2+1);
}
int updata(int l,int r,int count)
{
int res;
if(mapp[count].max<x) return -1;
if(l==r)
{
mapp[count].max-=x;
return l;
}
int mid=(l+r)/2;
if(mapp[count*2].max>=x) res=updata(l,mid,count*2);
else res=updata(mid+1,r,count*2+1);
mapp[count].max=max(mapp[count*2].max,mapp[count*2+1].max);
return res;
}
int main()
{
cin.sync_with_stdio(false);
while(cin>>n>>m>>t)
{
n=n>t? t:n;
build(1,n,1);
while(t--)
{
cin>>x;
cout<<updata(1,n,1)<<endl;
}
}
return 0;
}