社区讨论
分块0pts 求条 玄2关
P13982数列分块入门 7参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mj79wwgn
- 此快照首次捕获于
- 2025/12/15 22:53 2 个月前
- 此快照最后确认于
- 2025/12/19 12:10 2 个月前
record
CPP#include<bits/stdc++.h>
#define int long long
#define fast register int
using namespace std;
const int N=3e6+100,P=10007;
int n,m;
int a[N];
int t;
int L[N],R[N],pos[N],add[N],b[N],val[N],mul[N];
inline void update(int lazy,int x,int y,int v) {
int p=pos[x],q=pos[y];
if (lazy==0){
if (p==q) {
for (fast i=x; i<=y; i++) {a[i]=((a[i]%P+v%P)%P+P)%P;}
return ;
}
for (fast i=p+1; i<=q-1; i++) add[i]=((add[i]%P+v%P)%P+P)%P;
for (fast i=x; i<=R[p]; i++) {a[i]=((a[i]%P+v%P)%P+P)%P;}
for (fast i=L[q]; i<=y; i++) {a[i]=((a[i]%P+v%P)%P+P)%P;}
}
if (lazy==1){
if (p==q) {
for (fast i=x; i<=y; i++) {a[i]=((a[i]%P*v%P)%P+P)%P;}
return ;
}
for (fast i=p+1; i<=q-1; i++) add[i]=((add[i]%P*v%P)%P+P)%P,mul[i]=((mul[i]%P*v%P)%P+P)%P;
for (fast i=x; i<=R[p]; i++) {a[i]=((a[i]%P*v%P)%P+P)%P;}
for (fast i=L[q]; i<=y; i++) {a[i]=((a[i]%P*v%P)%P+P)%P;}
}
}
inline int query(int x){
int p=pos[x];
return ((a[x]%P*mul[p]%P+add[p]%P)%P+P)%P;
}
signed main() {
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// freopen("a3.in","r",stdin);
cin>>n;
for (fast i=1;i<=n*10;i++) mul[i]=1;
t=sqrt(n);
for (fast i=1; i<=n; i++) {
cin>>a[i];
}
for (fast i=1; i<=t; i++) {
L[i]=(i-1)*t+1;
R[i]=i*t;
for (fast j=L[i]; j<=R[i]; j++) pos[j]=i;
}
if (R[t]<n) {
t++;
L[t]=R[t-1]+1;
R[t]=n;
for (fast i=L[t]; i<=R[t]; i++) pos[i]=t;
}
int qwq=n;
while (qwq--) {
int opt,x,y,w;
cin>>opt>>x>>y>>w;
if (opt==0) {
update(0,x,y,w);
}
if (opt==1){
update(1,x,y,w);
}
if (opt==2){
cout<<query(y)<<"\n";
}
}
return !!!("風雨中這點痛算什麽");
}
/*
5
1 12 1 1 1
0 1 2 1
0 1 2 1
0 1 2 1
0 1 5 1
1 1 5 2
*/
回复
共 3 条回复,欢迎继续交流。
正在加载回复...