1. 程式人生 > 其它 >Navicat Premium 15啟用步驟

Navicat Premium 15啟用步驟

  1 #include <iostream>
  2 #include <cstdio>
  3 using namespace std;
  4 
  5 typedef long long ll;
  6 const ll MAXN=100010;
  7 const ll MOD=571373;
  8 
  9 struct Tree
 10 {
 11     ll l,r;
 12     ll sum;
 13     ll atag;
 14     ll mtag;
 15 }t[MAXN<<2];
 16 ll a[MAXN<<2];
17 18 ll cnt=0; 19 void buildTree(ll root,ll l,ll r) //建樹 20 { 21 t[root].l=l,t[root].r=r; 22 if (l==r) t[root].sum=a[++cnt]; 23 else 24 { 25 ll mid=(l+r)>>1; 26 buildTree(root<<1,l,mid); 27 buildTree(root<<1|1,mid+1,r); 28 t[root].sum=(t[root<<1
].sum+t[root<<1|1].sum)%MOD; 29 } 30 return; 31 } 32 33 void pushDown(ll root) //下傳標記 34 { 35 t[root<<1].sum=(t[root].mtag*t[root<<1].sum+((t[root<<1].r-t[root<<1].l+1)*t[root].atag)%MOD)%MOD; 36 t[root<<1|1].sum=(t[root].mtag*t[root<<1
|1].sum+((t[root<<1|1].r-t[root<<1|1].l+1)*t[root].atag)%MOD)%MOD; 37 t[root<<1].mtag=(t[root<<1].mtag*t[root].mtag)%MOD; 38 t[root<<1|1].mtag=(t[root<<1|1].mtag*t[root].mtag)%MOD; 39 t[root<<1].atag=(t[root<<1].atag*t[root].mtag+t[root].atag)%MOD; 40 t[root<<1|1].atag=(t[root<<1|1].atag*t[root].mtag+t[root].atag)%MOD; 41 t[root].mtag=1; 42 t[root].atag=0; 43 return; 44 } 45 void mul(ll root,ll l,ll r,ll val) //區間修改* 46 { 47 if (t[root].r<l || t[root].l>r) return; 48 if (t[root].l>=l && t[root].r<=r) 49 { 50 t[root].sum=t[root].sum*val%MOD; 51 t[root].atag=t[root].atag*val%MOD; 52 t[root].mtag=t[root].mtag*val%MOD; 53 return; 54 } 55 if (t[root].mtag!=1 || t[root].atag!=0) pushDown(root); 56 mul(root<<1,l,r,val),mul(root<<1|1,l,r,val); 57 t[root].sum=(t[root<<1].sum+t[root<<1|1].sum)%MOD; 58 return; 59 } 60 61 void add(ll root,ll l,ll r,ll val) //區間修改+ 62 { 63 if (t[root].r<l || t[root].l>r) return; 64 if (t[root].l>=l && t[root].r<=r) 65 { 66 t[root].sum=(t[root].sum+val*(t[root].r-t[root].l+1))%MOD; 67 t[root].atag=(t[root].atag+val)%MOD; 68 return; 69 } 70 if (t[root].mtag!=1 || t[root].atag!=0) pushDown(root); 71 add(root<<1,l,r,val),add(root<<1|1,l,r,val); 72 t[root].sum=(t[root<<1].sum+t[root<<1|1].sum)%MOD; 73 return; 74 } 75 76 ll query(ll root,ll l,ll r) 77 { 78 if (t[root].r<l || t[root].l>r) return 0; 79 if (t[root].l>=l && t[root].r<=r) return t[root].sum; 80 if (t[root].mtag!=1 || t[root].atag!=0) pushDown(root); 81 return (query(root<<1,l,r)+query(root<<1|1,l,r))%MOD; 82 } 83 84 int main() 85 { 86 ll n,m,p; 87 scanf("%lld%lld%lld",&n,&m,&p); 88 for (ll i=1;i<=n;i++) scanf("%lld",&a[i]); 89 for (ll i=0;i<MAXN<<2;i++) t[i].sum=t[i].atag=0,t[i].mtag=1; //init 90 91 buildTree(1,1,n); 92 93 while (m--) 94 { 95 ll opt; 96 scanf("%lld",&opt); 97 ll x,y,k; 98 if (opt==1) 99 { 100 scanf("%lld%lld%lld",&x,&y,&k); 101 mul(1,x,y,k); 102 } 103 else if (opt==2) 104 { 105 scanf("%lld%lld%lld",&x,&y,&k); 106 add(1,x,y,k); 107 } 108 else if (opt==3) 109 { 110 scanf("%lld%lld",&x,&y); 111 printf("%lld\n",query(1,x,y)); 112 } 113 } 114 115 return 0; 116 }