萌新求助!!!本地windows正常运行,洛谷IDE正常运行,CF直接RE
  • 板块学术版
  • 楼主ღꦿ࿐
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/11/30 08:49
  • 上次更新2023/11/3 23:14:36
查看原帖
萌新求助!!!本地windows正常运行,洛谷IDE正常运行,CF直接RE
161697
ღꦿ࿐楼主2021/11/30 08:49

CF35E

本地正常,IDE正常,CF runtime error on test 1(第一个样例)

又臭又长的Code

#include<bits/stdc++.h>
using namespace std;
#define ls (x<<1)
#define rs (x<<1|1)
#define R Tree[x].r
#define L Tree[x].l
#define mid ((L+R)>>1)
#define V(x) Tree[x].val
#define T(x) Tree[x].tag
const int N =3e5+20 ;
struct node{
	int val,tag,l,r;
}Tree[N*4];
int a[N],m,n,len;
void build(int x,int l,int r)
{
//	cout<<x<<"\n";
//	V(x)=T(x)=0;
	L=l;
	R=r;
	if(l==r){V(x)=0;return;}
	build(ls,l,mid);
	build(rs,mid+1,r);
}
void tag_down(int x)
{
	V(x)=max(V(x),T(x));
	T(ls)=max(T(ls),T(x));
	V(ls)=max(V(ls),T(x));
	T(rs)=max(T(rs),T(x));
	V(rs)=max(V(rs),T(x));
	T(x)=0;
}
void update(int x,int l,int r,int c)
{
	if(L==R) {V(x)=max(V(x),c);return;}
	if(l<=L&&R<=r) {T(x)=c;return ;}
	tag_down(x);
	if(l<=mid) update(ls,l,r,c);
	if(r>mid) update(rs,l,r,c);
}
int query(int x,int p)
{
	if(L==R) {return V(x);}
	tag_down(x);
	if(p<=mid) return query(ls,p);
	return query(rs,p);
}
struct hb{
    int l,r,hi;
}h[N],nh[N]; 
vector <int > LS ;
vector <int > cnt;
int final[N];
signed main()
{
    /*code by kk19212*/
    // Segement_Tree 
    //2021-11-29
    
    
    //每个建筑物可以看作放在了一些点  l,……r-1上
	//然后将点离散化, 
	cin>>n;
	for(int i=1;i<=n;++i)
	  cin>>h[i].hi>>h[i].l>>h[i].r ,LS.push_back(h[i].l),LS.push_back(h[i].r);
//	LS.push_back(minl-1),LS.push_back(maxr);
    sort(LS.begin(),LS.end());
	LS.erase(unique(LS.begin(),LS.end()),LS.end());
	int zs = LS.size();
	zs--; 
	for(int i=1;i<=n;++i)
	  {
		nh[i].hi=h[i].hi;
		nh[i].l=lower_bound(LS.begin(),LS.end(),h[i].l)-LS.begin();
		nh[i].r=lower_bound(LS.begin(),LS.end(),h[i].r)-LS.begin()-1;
	  }
	
	build(1,0,zs);
//    for(int i=0;i<=zs;++i)
//      cout<<LS[i]<<endl;
//    cout<<"---------------\n";
	for(int i=1;i<=n;++i)
	  update(1,nh[i].l,nh[i].r,nh[i].hi);
	for(int i=0;i<=zs;++i)
	  final[i]=query(1,i);
//	for(int i=0;i<=zs;++i)
//      cout<<LS[i]<<' '<<final[i]<<endl;
	int ans = 2;
	for(int i = 1;i<=zs;++i)
	  if(final[i]!=final[i-1]) ans++,ans++;
	cout<<ans<<endl;
	cout<<LS[0]<<' '<<0<<'\n'<<LS[0]<<' '<<final[0]<<'\n';	
	for(int i = 1;i<=zs;++i)
	  if(final[i]!=final[i-1]) cout<<LS[i]<<' '<<final[i-1]<<'\n'<<LS[i]<<' '<<final[i]<<'\n';
	return 0;
}   
2021/11/30 08:49
加载中...