末 日 三 问
查看原帖
末 日 三 问
307453
云浅知处はなび楼主2020/7/21 19:54
  • 珂朵莉树为什么TLE?
  • 为什么这么多凉心出题人都爱卡珂朵莉树?
  • 怎样卡常让珂爱的珂朵莉活过来?

我的一些尝试:

  • 手动开了 O3
  • 开了fread+快输(fwrite不会用)
  • 正在找火车头,准备怒上火车头(
  • 要真不行 就滚回去重写线段树

求大佬帮忙卡常......

#pragma GCC optimize(3)
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")

#include<cstdio>
#include<algorithm>
#include<set>
#include<vector>

using namespace std;

inline char nc(){
	static char buf[100000],*p1=buf,*p2=buf;
	return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){
	char ch=nc();
	int sum=0;
	while(!(ch>='0'&&ch<='9'))ch=nc();
	while(ch>='0'&&ch<='9')sum=sum*10+ch-48,ch=nc();
	return sum;
}
inline void printi(int x){
	if(x/10){
		printi(x/10);
	}
	putchar(x%10+'0');
}

struct Node{
    int l,r;
    mutable int val;
    Node(int L,int R,int V):l(L),r(R),val(V){}
    Node(int L):l(L){}
    bool operator<(const Node &o)const{
        return l<o.l;
    }
};

set<Node>s;
int n,m;

#define Sit set<Node>::iterator

Sit split(int pos){
    Sit it=s.lower_bound(Node(pos));
    if(it!=s.end()&&it->l==pos){
        return it;
    }
    it--;
    int L=it->l,R=it->r,V=it->val;
    s.erase(it);
    s.insert(Node(L,pos-1,V));
    return s.insert(Node(pos,R,V)).first;
}

inline void assign(int l,int r,int k){
    Sit itr=split(r+1),itl=split(l);
    s.erase(itl,itr);
    s.insert(Node(l,r,k));
}

inline int query(int x){
    int ans=0,now=0;
    for(Sit it=s.begin();it!=s.end();it++){
        if(it->val==0&&it->r<=n){
            if(now==0)ans=it->l;
            now+=it->r-it->l+1;
            if(now>=x)return ans;
        }
        else now=0;
    }
    return 0;
}

int main(void){

    n=read(),m=read();
    s.insert(Node(1,n,0));

    while(m--){
        int opt,x,l,r;
        opt=read();
        if(opt==1){
            x=read();
            int qwq=query(x);
            printi(qwq);
            putchar('\n');
            if(qwq!=0)assign(qwq,qwq+x-1,1);
        }
        else{
            l=read(),r=read();
            assign(l,l+r-1,0);
        }
    }

    return 0;
}
2020/7/21 19:54
加载中...