Description
小爱整天收到花。她有N个花瓶标号从0到N-1。如果她收到F朵花,她会选择一个花瓶A,尝试去放花进去那个花瓶。如果那个花瓶已经有花,她就顺序地找下一个,直到所有花都放完或者后面没有花瓶了。有时她会清理花瓶,把花瓶A到B(A<=B)之间的花全扔了。
Input
第一行两个整数N和M代表花瓶数和操作数。
然后M行每行第一个数字是K(1或2)。如果K是1,那么再输入A和F,如果K是2,那么输入A和B,含义如上所述。
Output
每个操作输出一行。
对于操作1,输出成功放花的第一个位置和最后一个位置,如果一朵花都没放,输出‘Can not put any one.’。
对于操作2,输出扔了多少花。
Sample Input
10 5
1 3 5
2 4 5
1 1 8
2 3 6
1 8 8
Sample Output
3 7
2
1 9
4
Can not put any one.
Data Constraint
对于40%的数据,有1≤N,M≤100。
对于100%的数据,有1≤N,M≤50000。
思路:
一看就是线段树,但我是蒟蒻,不会打。。。233 。。。
结果暴力睡了90分
然后加了O3优化,AC了。。。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool a[55555];
__attribute__((optimize("-O3")))
int main()
{
int n=0,m=0;
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
for(int i=1; i<=m; i++)
{
int x=0,y=0,t=0,xx=0;
scanf("%d%d%d",&t,&x,&y);
if(t==1)
{
bool f=0;
int p=y;
while(p>0 && x<=n-1)
{
if(!a[x])
{
a[x]=1;
if(!f)
{
f=1; printf("%d ",x);
}
xx=x;
p--;
}
x++;
}
if(!f) printf("Can not put any one.\n"); else printf("%d\n",xx);
}else
{
int s=0;
for(int i=x; i<=y; i++)
{
s+=a[i]; a[i]=0;
}
printf("%d\n",s);
}
}
}
//原创200祭