QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#489115 | #8819. CNOI Knowledge | ran_qwq | TL | 0ms | 0kb | C++23 | 2.9kb | 2024-07-24 18:11:46 | 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