1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| #include<bits/stdc++.h> using namespace std;
#define bg(i) (i*len-len+1) #define ed(i) min(n,i*len) #define gc getchar() #define rd read() const int N=2e5+100,M=505,MOD=10007; void mod(int &a){ a+=a>=MOD?-MOD:a<0?MOD:0; } int read(){ int x=0,f=1; char c=gc; for(;c<'0'||c>'9';c=gc) if(c=='-') f=-1; for(;c>='0'&&c<='9';c=gc) x=(x<<1)+(x<<3)+c-'0'; return f*x; }
int n,a[N]; int len,bk[N],mtag[M],atag[M];
void pushdown(int id){ if(atag[id]==0&&mtag[id]==1) return; for(int i=bg(id);i<=ed(id);i++) a[i]=(a[i]*mtag[id]%MOD+atag[id])%MOD; atag[id]=0,mtag[id]=1; } void add(int l,int r,int v){ pushdown(bk[l]),pushdown(bk[r]); if(bk[l]==bk[r]) for(int i=l;i<=r;i++) mod(a[i]+=v); else{ for(int i=l;i<=ed(bk[l]);i++) mod(a[i]+=v); for(int i=bk[l]+1;i<=bk[r]-1;i++) mod(atag[i]+=v); for(int i=bg(bk[r]);i<=r;i++) mod(a[i]+=v); } } void mul(int l,int r,int v){ pushdown(bk[l]),pushdown(bk[r]); if(bk[l]==bk[r]) for(int i=l;i<=r;i++) a[i]=1ll*a[i]*v%MOD; else{ for(int i=l;i<=ed(bk[l]);i++) a[i]=1ll*a[i]*v%MOD; for(int i=bk[l]+1;i<=bk[r]-1;i++) mtag[i]=1ll*mtag[i]*v%MOD,atag[i]=1ll*atag[i]*v%MOD; for(int i=bg(bk[r]);i<=r;i++) a[i]=1ll*a[i]*v%MOD; } }
int main(){ n=rd; len=sqrt(n); for(int i=1;i<=n;i++) a[i]=rd,bk[i]=(i-1)/len+1,mtag[bk[i]]=1; for(int i=1,op,l,r,v;i<=n;i++){ op=rd,l=rd,r=rd,v=rd; if(op==0) add(l,r,v); else if(op==1) mul(l,r,v); else printf("%d\n", (a[r]*mtag[bk[r]]%MOD+atag[bk[r]])%MOD); }
return 0; }
## 8 ```c++ #include<bits/stdc++.h> using namespace std;
#define bg(i) (i*len-len+1) #define ed(i) min(n,i*len) #define gc getchar() #define rd read() const int N=2e5+100,M=505,MOD=10007; void mod(int &a){ a+=a>=MOD?-MOD:a<0?MOD:0; } int read(){ int x=0,f=1; char c=gc; for(;c<'0'||c>'9';c=gc) if(c=='-') f=-1; for(;c>='0'&&c<='9';c=gc) x=(x<<1)+(x<<3)+c-'0'; return f*x; }
int n,len,a[N],bk[N],ctag[M];
void pushdown(int id){ if(ctag[id]!=-1) for(int i=bg(id);i<=ed(id);a[i]=ctag[id],i++); ctag[id]=-1; } int sol(int l,int r,int v){ int res=0; pushdown(bk[l]),pushdown(bk[r]); if(bk[l]==bk[r]) for(int i=l;i<=r;i++) res+=(a[i]==v),a[i]=v; else{ for(int i=l;i<=ed(bk[l]);i++) res+=(a[i]==v),a[i]=v; for(int i=bg(bk[r]);i<=r;i++) res+=(a[i]==v),a[i]=v; for(int i=bk[l]+1;i<=bk[r]-1;i++){ if(ctag[i]!=-1) res+=(ctag[i]==v)*(ed(i)-bg(i)+1); else for(int j=bg(i);j<=ed(i);j++) res+=(a[j]==v); ctag[i]=v; } } return res; }
int main(){ n=rd; len=sqrt(n); for(int i=1;i<=n;i++) a[i]=rd,bk[i]=(i-1)/len+1; for(int i=1;i<=bk[n];i++) ctag[i]=-1; for(int i=1,l,r,v;i<=n;i++){ l=rd,r=rd,v=rd; printf("%d\n", sol(l,r,v)); }
return 0; }
|