刚发错了
查看原帖
刚发错了
1443779
turn_line楼主2024/9/10 12:52

#include #include #include #include<string.h> #include using namespace std; int read(void){ int x=0;int w=1;char ch=0; while(!isdigit(ch)){if(ch=='-')w=-1;if(ch=='+')w=1;ch=getchar();} while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar(); return wx; } void write(int x){ if(x<0){putchar('-');x=-x;} if(x>9)write(x/10); putchar(x%10+'0'); } int Left(int a){return a2;} int Right(int a){return a2+1;} int i,j,k,m,n,a[1000001],ans[1000001],Lazy[1000001],lazy[1000001]; void PushUp(int now){ ans[now]=(ans[Left(now)]+ans[Right(now)]); } void Build(int now,int l,int r){ if(l==r){ans[now]=a[l];return;} int mid=(l+r)/2; Build(Left(now),l,mid); Build(Right(now),mid+1,r); PushUp(now); } void Function(int now,int l,int r,int Add){ Lazy[now]+=Add; ans[now]+=Add(r-l+1); } void PushDown(int now,int l,int r){ int mid=(l+r)/2; Function(Left(now),l,mid,Lazy[now]); Function(Right(now),mid+1,r,Lazy[now]); Lazy[now]=0; } void function(int now,int l,int r,int Add){ Lazy[now]=Add; lazy[now]=Add; ans[now]=Add; } void Push_Down(int now,int l,int r){ int mid=(l+r)/2; function(Left(now),l,mid,lazy[now]); function(Right(now),mid+1,r,lazy[now]); lazy[now]=1; } void Data(int NowL,int NowR,int l,int r,int now,int Add){ if(NowL<=l&&NowR>=r){ ans[now]+=Add(r-l+1); Lazy[now]+=Add; return; } Push_Down(now,l,r); PushDown(now,l,r); int mid=(l+r)/2; if(NowL<=mid)Data(NowL,NowR,l,mid,Left(now),Add); if(NowR>mid)Data(NowL,NowR,mid+1,r,Right(now),Add); PushUp(now); } void data(int NowL,int NowR,int l,int r,int now,int Add){ if(NowL<=l&&NowR>=r){ ans[now]=Add; Lazy[now]=Add; lazy[now]=Add; return; } Push_Down(now,l,r); PushDown(now,l,r); int mid=(l+r)/2; if(NowL<=mid)data(NowL,NowR,l,mid,Left(now),Add); if(NowR>mid)data(NowL,NowR,mid+1,r,Right(now),Add); PushUp(now); } int Query(int NowL,int NowR,int l,int r,int now){ int Return=0; if(NowL<=l&&NowR>=r)return ans[now]; int mid=(l+r)/2; Push_Down(now,l,r); PushDown(now,l,r); if(NowL<=mid)Return+=Query(NowL,NowR,l,mid,Left(now)); if(NowR>mid)Return+=Query(NowL,NowR,mid+1,r,Right(now)); return Return; } int main(){ n=2; int A=read(),B=read(); if(A==0&&B==0) { write(0); return 0; } Build(1,1,n); for(i=1;i<=n4;i++)lazy[i]=1; int Gcd=__gcd(A,B); Data(1,1,1,n,1,A/Gcd); Data(2,2,1,n,1,B/Gcd); data(1,2,1,n,1,Gcd); write(Query(1,2,1,n,1)); }```c

2024/9/10 12:52
加载中...