QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#489115#8819. CNOI Knowledgeran_qwqTL 0ms0kbC++232.9kb2024-07-24 18:11:462024-07-24 18:11:46

Judging History

你现在查看的是最新测评结果

  • [2024-07-24 18:11:46]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2024-07-24 18:11:46]
  • 提交

answer

#include<bits/stdc++.h>
#define il inline
#define ui unsigned int
#define ll long long
#define ull unsigned ll
#define lll __int128
#define db double
#define ldb long double
#define pii pair<int,int>
#define vi vector<int>
#define vpii vector<pii>
#define fir first
#define sec second
#define gc getchar
#define pc putchar
#define mst(a,x) memset(a,x,sizeof a)
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define pct __builtin_popcount
using namespace std;
const int N=6e5+10,INF=0x3f3f3f3f,MOD=1e9+7; const ll INFll=0x3f3f3f3f3f3f3f3f;
il int rd() {int x=0,f=1; char ch=gc(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=gc();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc(); return x*f;}
il ll rdll() {ll x=0; int f=1; char ch=gc(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=gc();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc(); return x*f;}
il void wr(int x) {if(x<-2147483647) {printf("-2147483648"); return;} if(x<0) {pc('-'),wr(-x); return;} if(x<10) {pc(x+'0'); return;} wr(x/10),pc(x%10+'0');}
il void wrll(ll x) {if(x<-9223372036854775807) return (void)printf("-9223372036854775808"); if(x<0) return pc('-'),wrll(-x); if(x<10) return (void)pc(x+'0'); wrll(x/10),pc(x%10+'0');}
il void wr(int x,char *s) {wr(x),printf("%s",s);}
il void wrll(ll x,char *s) {wrll(x),printf("%s",s);}
il int vmod(int x) {return x>=MOD?x-MOD:x;}
il int vadd(int x,int y) {return vmod(x+y);}
il int vsub(int x,int y) {return vmod(x-y+MOD);}
il int vmul(int x,int y) {return 1ll*x*y%MOD;}
il int qpow(int x,int y) {int res=1; for(;y;y>>=1,x=vmul(x,x)) if(y&1) res=vmul(res,x); return res;}
il void cadd(int &x,int y) {x=vmod(x+y);}
il void csub(int &x,int y) {x=vmod(x-y+MOD);}
il void cmax(int &x,int y) {x<y&&(x=y);}
il void cmin(int &x,int y) {x>y&&(x=y);}
int n,m; pii e[N]; ll ans;
struct DSU {
	int top,fa[N],siz[N]; ll sum[N]; pii st[N];
	void init() {for(int i=1;i<=n;i++) fa[i]=i,siz[i]=1;}
	int fd(int x) {return x==fa[x]?x:fd(fa[x]);}
	void mg(int x,int y) {x=fd(x),y=fd(y); if(x==y) return; if(siz[x]>siz[y]) swap(x,y); st[++top]={x,y},fa[x]=y,siz[y]+=siz[x],sum[x]-=sum[y];}
	void ud() {int x=st[top].fir,y=st[top].sec; fa[x]=x,siz[y]-=siz[x],sum[x]+=sum[y],top--;}
} D;
struct SGT {
	#define ls (id<<1)
	#define rs (id<<1|1)
	#define mid (l+r>>1)
	vi tr[N<<2];
	void upd(int id,int l,int r,int L,int R,int k) {if(L>R) return; if(L<=l&&r<=R) return tr[id].pb(k); L<=mid?upd(ls,l,mid,L,R,k):(void)0,R>mid?upd(rs,mid+1,r,L,R,k):(void)0;}
	void sol(int id,int l,int r) {
		int lst=D.top; for(int i:tr[id]) D.mg(e[i].fir,e[i].sec);
		if(l==r) D.sum[D.fd(1)]+=l; else sol(ls,l,mid),sol(rs,mid+1,r); while(D.top>lst) D.ud();
	}
} T;
void QwQ() {
	n=rd(),m=rd(),D.init(); for(int i=1,l,r;i<=m;i++) e[i]={rd(),rd()},l=rd(),r=rd(),T.upd(1,1,n,l,r,i);
	T.sol(1,1,n); for(int i=1;i<=n;i++) ans^=D.sum[i]; wrll(ans,"\n");
}
signed main() {
	int T=1; while(T--) QwQ();
}
//

详细

Test #1:

score: 0
Time Limit Exceeded

input:

12

output:


result: