标签:线段树
1 10 16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709 10 1 3 6 74243042 2 4 8 16531729 1 3 4 1474833169 2 1 8 1131570933 2 7 9 1505795335 2 3 7 101929267 1 4 10 1624379149 2 2 8 2110010672 2 6 7 156091745 1 2 5 937186357
16807 937186357 937186357 937186357 937186357 1 1 1624379149 1624379149 1624379149
#include <cstdio> #include <cstring> #include <vector> #include <algorithm> #include <queue> #include <stack> #include <string> #include <iostream> #include <set> using namespace std; const int MAX= 1e5+10; const int inf = 0x3f3f3f3f; const int MOD = 1e9+10; const double eps= 1e-8; typedef long long LL ; typedef vector<int> vec; typedef vector<vec> mat; LL gcd(LL a,LL b) { return b==0?a:gcd(b,a%b); } LL ans[MAX<<2],col[MAX<<2],a[MAX]; inline void push_up(int o) { if(col[o<<1]==col[o<<1|1]) col[o]=col[o<<1]; } inline void push_down(int o) { if( col[o]!=-1) { col[o<<1]=col[o<<1|1]=col[o]; col[o]=-1; } return ; } void build(int L,int R,int o) { col[o]=-1; if(L==R) { col[o]=a[L]; return ; } int mid=(L+R)>>1; build(L,mid,o<<1); build(mid+1,R,o<<1|1); push_up(o); } void modify1(int L,int R,int o,int ls,int rs,LL x) { if(ls<=L&&rs>=R) { col[o]=x; return ; } push_down(o); int mid=(L+R)>>1; if(ls<=mid) modify1(L,mid,o<<1,ls,rs,x); if(rs>mid) modify1(mid+1,R,o<<1|1,ls,rs,x); push_up(o); } void modify2(int L,int R,int o,int ls,int rs,LL x) { if(ls<=L&&rs>=R&&col[o]!=-1) { if(col[o]>x) { col[o]=gcd(col[o],x); } return ; } push_down(o); int mid=(L+R)>>1; if(ls<=mid) modify2(L,mid,o<<1,ls,rs,x); if(rs>mid) modify2(mid+1,R,o<<1|1,ls,rs,x); push_up(o); } LL Query(int L,int R,int o,int k) { if(L==R) { return col[o]; } push_down(o); int mid=(L+R)>>1; if(k<=mid) return Query(L,mid,o<<1,k); else return Query(mid+1,R,o<<1|1,k); } int main() { //freopen("in.txt","r",stdin); int cas,n,op,ls,rs,m; LL x; scanf("%d",&cas); while(cas--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); build(1,n,1); scanf("%d",&m); for(int i=0;i<m;i++) { scanf("%d %d %d %I64d",&op,&ls,&rs,&x); if(op==1) { modify1(1,n,1,ls,rs,x); } else modify2(1,n,1,ls,rs,x); } for(int i=1;i<=n;i++) { // if(i==1) printf("%I64d",Query(1,n,1,i)); printf("%I64d ",Query(1,n,1,i)); } printf("\n"); //printf(" "); } return 0; }
线段树lazy标记??Hdu4902,布布扣,bubuko.com
标签:线段树
原文地址:http://blog.csdn.net/acvcla/article/details/38324509