题意说明:
解题说明:~
AC代码;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2*1e5+10;
int s[(MAXN<<2)+10],n,m,w,ans;
void modify(int p,int l,int r,int x,int v){
if(l==r){
s[p]=v;
return;
}
int mid=(l+r)/2;
if(x<=mid)modify(p<<1,l,mid,x,v);
else modify((p<<1)+1,mid+1,r,x,v);
s[p]=max(s[p<<1],s[(p<<1)+1]);
return;
}
bool query(int p,int l,int r,int v){
if(s[p]<v)return false;
while(l<r){
int mid=(l+r)/2;
if(s[p<<1]>=v){
r=mid;
p<<=1;
continue;
}
else {
if(s[(p<<1)+1]<v)return false;
else {
l=mid+1;
p=(p<<1)+1;
}
}
}
ans=l;
if(l>=r&&s[p]>=v){
modify(1,1,min(n,w),l,s[p]-v);
return true;
}
else return false;
}
int main(){
scanf("%d%d%d",&n,&m,&w);
for(int i=1;i<=(MAXN<<2);i++){
s[i]=m;
}
int ip;
for(int i=1;i<=w;i++){
scanf("%d",&ip);
if(query(1,1,min(w,n),ip)){
printf("%d\n",ans);
}
else puts("-1");
}
return 0;
}