#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <iostream> #include <algorithm> using namespace std; #define maxn 200105 int row,col,ans,flag; int an[200105]; struct Tree{ int l,r,Max; }tr[maxn*4]; void build(int L,int R,int idx) { tr[idx].l=L; tr[idx].r=R; tr[idx].Max=col; if(tr[idx].l==tr[idx].r) return ; int mid=(tr[idx].l+tr[idx].r)/2; build(tr[idx].l,mid,idx<<1); build(mid+1,tr[idx].r,idx<<1|1); } void update(int idx,int a) { if(tr[idx].l==tr[idx].r) { tr[idx].Max-=a; return ; } int mid=(tr[idx].l+tr[idx].r)/2; if(tr[idx<<1].Max>=a) update(idx<<1,a); else if(tr[idx<<1|1].Max>=a) update(idx<<1|1,a); tr[idx].Max=max(tr[idx<<1].Max,tr[idx<<1|1].Max); } void query(int idx,int a) { if(flag) return ; if(tr[idx].Max<a) return ; if(tr[idx].l==tr[idx].r) { flag=1; ans=tr[idx].l; return ; } if(tr[idx<<1].Max>=a) query(idx<<1,a); else if(tr[idx<<1|1].Max>=a) query(idx<<1|1,a); else return ; } int main() { freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); int i,j,m; while(scanf("%d%d%d",&row,&col,&m)==3) { if(row > m) row = m; build(1,row,1); //for(i=1;i<=row*3;i++) // printf("%d %d %d\n",tr[i].l,tr[i].r,tr[i].Max); // printf("*********************\n"); for(j=1;j<=m;j++) { scanf("%d",&an[j]); flag=0; ans=-1; query(1,an[j]); printf("%d\n",ans); if(flag) update(1,an[j]); // for(i=1;i<=row*3;i++) // printf("%d %d %d\n",tr[i].l,tr[i].r,tr[i].Max); // printf("*********************\n"); } } return 0; }