做网站要有哪些知识,鞍山公司网站建设,晋江文创园网站建设,常州关键词优化如何Vases and Flowers HDU - 4614
题意:
一排空瓶子放花#xff0c;操作1#xff1a;从第x个瓶子开始放花#xff0c;放y朵花#xff0c;每个瓶子就一朵花#xff0c;如果碰到已经有花的瓶子跳过这个瓶子#xff0c;看下一个#xff0c;当花没了#xff0c;或者瓶子不够…Vases and Flowers HDU - 4614
题意:
一排空瓶子放花操作1从第x个瓶子开始放花放y朵花每个瓶子就一朵花如果碰到已经有花的瓶子跳过这个瓶子看下一个当花没了或者瓶子不够了结束输入第一个放花的瓶子和最后一个放花的瓶子如果一朵花都没放进瓶子输出一行字符’Can not put any one.’操作2把x到y之间的花清空输出清空花的数量
题解
操作2好做操作1的起点终点如何确定我们可以直接二分确定先二分确定左端点然后利用左端点再二分确定右端点。
代码
#includebits/stdc.h
#define debug(a,b) printf(%s %d\n,a,b);
typedef long long ll;
using namespace std;
const ll mod1e47;
const int maxn1e550;int lazy[maxn2],ans[maxn2];
int n,m;void pushup(int rt)
{ans[rt]ans[rt1]ans[rt1|1];
}void pushdown(int rt,int m)
{if(lazy[rt]!-1){ans[rt1]lazy[rt]*(m-(m1));ans[rt1|1]lazy[rt]*(m1);lazy[rt1]lazy[rt];lazy[rt1|1]lazy[rt];lazy[rt]-1;}
}void Update(int L,int R,int l,int r,int rt,int c)
{if(Ll rR){ans[rt]c*(r-l1);lazy[rt]c;return;}pushdown(rt,r-l1);int mid(rl)1;if(Lmid)Update(L,R,l,mid,rt1,c);if(Rmid)Update(L,R,mid1,r,rt1|1,c);pushup(rt);
}int Query(int L,int R,int l,int r,int rt)
{if(Ll rR){return ans[rt];}pushdown(rt,r-l1);int ANS0;int mid(lr)1;if(Lmid)ANSQuery(L,R,l,mid,rt1);if(Rmid)ANSQuery(L,R,mid1,r,rt1|1);return ANS;
}int findst(int l,int r)
{if(Query(l,r,0,n-1,1)(r-l1))return -1;while(lr){int mid(lr)1;if(Query(l,mid,0,n-1,1)(mid-l1))rmid;else lmid1;}return l;
}int finded(int l,int r,int f)
{int stl;fmin(f,(r-l1)-Query(l,r,0,n-1,1));while(lr){int mid(lr)1;if((mid-st1)-Query(st,mid,0,n-1,1)f)lmid1;else rmid;}return l;
}int main()
{
// freopen(in.txt,r,stdin);int t;scanf(%d,t);while(t--){memset(lazy,-1,sizeof lazy);memset(ans,0,sizeof ans);scanf(%d%d,n,m);while(m--){int a,b,c;scanf(%d%d%d,a,b,c);if(a2){coutQuery(b,c,0,n-1,1)endl;Update(b,c,0,n-1,1,0);}else{int stfindst(b,n-1);if(st-1){coutCan not put any one.endl;continue;}int edfinded(st,n-1,c);Update(st,ed,0,n-1,1,1);coutst edendl;}}coutendl;}return 0;
}