线段树WA on#12求调!
查看原帖
线段树WA on#12求调!
494192
ChickenDrinkingMilk楼主2023/10/17 22:54
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#define Lson tr[root].lson
#define Rson tr[root].rson
using namespace std;
const int N=1e5,M=3e6;
int n,m,Root[N+5],cntt,ans=1;
struct node{
	int lson,rson,sum;
}tr[M+5];
void pushup(int root){
	tr[root].sum=max(tr[Lson].sum,tr[Rson].sum);
//	ans=max(ans,tr[root].sum);
}
int query(int root,int L,int R,int pl,int pr){
	if (!root) return 0;
	if (pl<=L&&R<=pr) return tr[root].sum;
	int mid=L+R>>1,mx=0;
	if (mid>=pl) mx=max(mx,query(Lson,L,mid,pl,pr));
	if (mid<pr) mx=max(mx,query(Rson,mid+1,R,pl,pr));
	return mx;
}
void update(int &root,int L,int R,int w,int x){//&
	if (!root){root=++cntt;Lson=Rson=0;}
	if (L==R){
		tr[root].sum+=x;
		return;
	}
	int mid=L+R>>1;
	if (w<=mid) update(Lson,L,mid,w,x);
	else update(Rson,mid+1,R,w,x);
	pushup(root);
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for (int i=1;i<=m;i++){
		int u,v,w; cin>>u>>v>>w;
//		if (u==v) continue; 
		update(Root[v],0,N,w,query(Root[u],0,N,0,w-1)+1);//0not1
		ans=max(ans,tr[Root[v]].sum);
	}
	cout<<ans;
}


2023/10/17 22:54
加载中...