首页 > 其他 > 详细

loj 6277 数列分块入门 #1 #4

时间:2019-08-05 20:12:04      阅读:98      评论:0      收藏:0      [点我收藏+]

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

题解:分块。

 

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=50005;
int w[maxn],sum[maxn],block;
int main()
{
  int k,i,n,l,r,c,op,pre,end;
  scanf("%d",&n);
  block=sqrt(n);
  for(i=1;i<=n;i++) scanf("%d",&w[i]);
  for(i=0;i<n;i++)
  {
    scanf("%d%d%d%d",&op,&l,&r,&c);
    if(op==0)
    {
      pre=((l-1)/block+1);
      end=((r-1)/block+1);
      if(pre==end)  for(k=l;k<=r;k++) w[k]+=c;
      else
      {
       for(k=l;k<=pre*block;k++) w[k]+=c;
       for(k=(end-1)*block+1;k<=r;k++) w[k]+=c;
       for(k=pre+1;k<end;k++) sum[k]+=c;
      }
    }
    else printf("%d\n",w[r]+sum[((r-1)/block+1)]);
  }
  system("pause");
  return 0;
}

 

 

 

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

 题解:分块。

 

 代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
int n,block;
long long sum[maxn],b[maxn],w[maxn];
int get(int x);
void update(int l,int r,int c);
long long check(int l,int r,int c);
int main() { int i,op,l,r,c; scanf("%d",&n); block=sqrt(n); for(i=1;i<=n;i++) { scanf("%lld",&w[i]); sum[get(i)]+=w[i]; } for(i=0;i<n;i++) { scanf("%d%d%d%d",&op,&l,&r,&c); if(op==0) update(l,r,c); else printf("%lld\n",check(l,r,c)); } system("pause"); return 0; } int get(int x) {return (x-1)/block+1;} void update(int l,int r,int c) { int pre,end,k; pre=get(l);end=get(r); if(pre==end) { for(k=l;k<=r;k++) w[k]+=c,sum[get(k)]+=c; } else { for(k=l;k<=pre*block;k++) w[k]+=c,sum[get(k)]+=c; for(k=(end-1)*block+1;k<=r;k++) w[k]+=c,sum[get(k)]+=c; for(k=pre+1;k<end;k++) b[k]+=c; } } long long check(int l,int r,int c) { long long ans=0; int pre,end,k,x; pre=get(l);end=get(r); if(pre==end) { for(k=l;k<=r;k++) ans=(ans+w[k]+b[pre])%(c+1); } else { for(k=l;k<=pre*block;k++) ans=(ans+w[k]+b[get(k)])%(c+1); for(k=(end-1)*block+1;k<=r;k++) ans=(ans+w[k]+b[get(k)])%(c+1); for(k=pre+1;k<end;k++) ans=(ans+sum[k]+b[k]*block)%(c+1); } return ans%(c+1); }

loj 6277 数列分块入门 #1 #4

原文:https://www.cnblogs.com/VividBinGo/p/11302687.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!