not thing
原题链接:69142.e2025-08-29 11:23:14
发布于:广东
辗转相除法
long long g(long long a,long long b){
if(a%b==0){
return b;
}
return g(b,a%b);
}
埃氏质数
int a[11111111]
void s(){
a[1]=1;
for(int i=2;i*i<=11111111;i++){
if(a[i]==0){
for(int j=2*i;j<=11111111;j+=i){
a[j]=1;
}
}
}
}
队列《queue》
创建队列queue<int >q;
q.push(x);入队
q.pop();出队
q.front();队首
q.back();队尾
q.empty();判空
q.size();长度
前缀和
#include<bits/stdc++.h>//5 3 1 2 3 4 5 1 5 2 3 3 5
using namespace std;
int n,a[111111],q,w,r,t,b[111111];
int main(){
cin>>n>>r;
for(int i=1;i<=n;i++){
cin>>a[i];
}
b[1]=a[1];
for(int i=2;i<=n;i++){
b[i]=b[i-1]+a[i];
}
for(int i=1;i<=r;i++){
cin>>q>>w;
cout<<b[w]-b[q-1]<<endl;
}
}
差分
#include<bits/stdc++.h>//5 3 1 2 3 4 5 1 5 2 3 3 5
using namespace std;//6 3 1 2 2 1 2 1 1 3 1 3 5 1 1 6 1
int n,a[111111],q,w,d,r,t,b[111111];
int main(){
cin>>n>>r;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
b[i]=a[i]-a[i-1];
}
for(int i=1;i<=r;i++){
cin>>q>>w>>d;
b[q]+=d;
b[w+1]-=d;
}
for(int i=1;i<=n;i++){
a[i]=a[i-1]+b[i];
cout<<a[i]<<" ";
}
}
前缀
b[i]=b[i-1]+a[i]//求前缀和数组a[],s[],用i表示某一项
b[w]-b[q-1]//求[l,r]的和
差分
b[i]=a[i]-a[i-1]//差分数组的构建
b[q]+=d;//差分变化
b[w+1]-=d;//差分变化
a[i]=a[i-1]+b[i];//差分还原
文件读取
int main(){
freopen("x.in","r",stdin);
freopen("x.out","r",stdout);
//代码放着
fclose(stdin);
fclose(stdout);
}
这里空空如也
有帮助,赞一个