标签:
以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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zafkiel_nightmare/article/details/47422249