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祭