行业知识
蓝桥每日一题 (差分)3月3号
2026-11-04 08:05:43
来源:互联网转载
//3279改变数组元素
���己做TLE:奈何想不出怎么用差分
()#includeusing namespace std;//3279 改变数组元素(超时)const int N=2e5+10;vectora;int t,n;int main(){ cin>>t; while(t--) { cin>>n; for(int i=0;i>b; a.push_back(0); int idx=a.size()-1; while(idx>=0&&b--) { a[idx--]=1; } } for(int i=0;i y的做法:根据本题特点,不去纠结中间具体加了多少,利用差分,只关心左右边界;最后巧妙地用!!来进行强制类型转换,输出0,1;(太厉害了)
#includeusing namespace std;//3279 改变数组元素const int N=2e5+10;int a[N];int t,n;int main(){ cin>>t; while(t--) { cin>>n; memset(a,0,(n+1)*4); //看来差分普遍用1开头 for(int i=1;i>m; m=min(m,i); //确定要在(l,r)区间上加数 int r=i,l=i-m+1; a[r+1]--,a[l]++; } for(int i=1;i开始自己写的时候,把a看成差分了(不该犯)() #includeusing namespace std;//797 差分(自己做最开始把a看做差分数组了)const int N=1e5+10;int a[N];int n,m;int b[N];//我们最后求的还是a的状态,所以一定不要直接对a进行操作//要先求差分数组int main(){ cin >>n>>m; for(int i=1;i>a[i]; b[i]=a[i]-a[i-1]; } while(m--) { int l,r,c; cin>>l>>r>>c; b[l]+=c; b[r+1]-=c; } for(int i=1;i>q; //原始数组 for(int i=1;ip[i][j]; } } //求解差分数组 for(int i=1;ix1>>y1>>x2>>y2>>c; f[x1][y1]+=c; f[x1][y2+1]-=c; f[x2+1][y1]-=c; f[x2+1][y2+1]+=c; } //求前缀和 for(int i=1;i
上一篇:服务器链接很久怎么办?
下一篇:外贸平台怎么引流?