社区讨论
珂朵莉树T了一个点,身败名裂
P2894[USACO08FEB] Hotel G参与者 9已保存回复 41
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 41 条
- 当前快照
- 1 份
- 快照标识符
- @mi6yjn61
- 此快照首次捕获于
- 2025/11/20 12:55 4 个月前
- 此快照最后确认于
- 2025/11/20 17:38 4 个月前
rt,感觉珂朵莉树可做,于是就15min打了个珂朵莉树,一直T一个点(非常数问题),冒昧求dalao优化程序QAQ,欢迎各位dalao提供意见
CPP#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<set>
#define re register
#define FOR(i,l,r) for(re int i=l;i<=r;++i)
#define IT set<node>::iterator
using namespace std;
int n,m,c,r,t,x,y,z,sq;
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(){
re char ch=nc();
re 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 out(re int a){
if(a>=10)out(a/10);
putchar(a%10+'0');
}
struct node{
int l,r;
mutable int v;
node(int L,int R=-1,int V=0):l(L),r(R),v(V){}
bool operator <(const node &o)const{
return l<o.l;
}
};
set<node> s;
inline IT split(int pos){
IT it=s.lower_bound(node(pos));
if(it!=s.end()&&it->l==pos)
return it;
--it;
int L=it->l;
int R=it->r;
int V=it->v;
s.erase(it);
s.insert(node(L,pos-1,V));
return s.insert(node(pos,R,V)).first;
}
inline void assign_val(re int l,re int r,re int k){
IT itr=split(r+1),itl=split(l);
s.erase(itl,itr);
s.insert(node(l,r,k));
}
inline int query(re int l,re int r){
int res=0,anss=0;
IT itr=split(r+1),itl=split(l),it;
for(;itl!=itr;++itl){
if(!itl->v){
if(!res){
res=itl->l;
}
anss+=itl->r-itl->l+1;
if(anss>=sq){
int cc=itl->r-(anss-sq);
assign_val(res,cc,1);
return res;
}
}
else{
anss=0;
res=0;
}
}
return 0;
}
int main(){
int ansss=0;
n=read(),m=read();
s.insert(node(1,n,0));
FOR(i,1,m){
t=read();
if(t==1){
sq=read();
out(query(1,n));
puts("");
ansss++;
}
else{
x=read(),y=read();
assign_val(x,x+y-1,0);
}
}
}
回复
共 41 条回复,欢迎继续交流。
正在加载回复...