首页 > 其他 > 详细

loj 6282 数列分块入门 6

时间:2019-08-06 01:07:54      阅读:92      评论:0      收藏:0      [点我收藏+]

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

题解:块状链表。最简陋的块状链表就能过。

 

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
int n,block,cnt,w[maxn];
vector<int> v[maxn];
int get(int x);
void insert(int l,int r);
int check(int r);
int main()
{
  int i,op,l,r,c;
  scanf("%d",&n);
  
  block=sqrt(n);
  if(n%block) cnt=n/block+1;
  else cnt=n/block;
  
  for(i=1;i<=n;i++) 
  {
    scanf("%lld",&w[i]);
    v[get(i)].push_back(w[i]);
  }
  
  for(i=0;i<n;i++)
  {
    scanf("%d%d%d%d",&op,&l,&r,&c);
    if(op==0) insert(l,r);
    else printf("%d\n",check(r));
  }
  system("pause");
  return 0;
}
int get(int x)
{return (x-1)/block+1;}
void insert(int l,int r)
{
  for(int i=1;i<=cnt;i++)
  {
      if(l<=v[i].size()) 
      {
        v[i].insert(v[i].begin()+l-1,r);
        break;
      }
      else l-=v[i].size();
  }
}
int check(int r)
{
  for(int i=1;i<=cnt;i++)
  {
    if(r<=v[i].size())  return v[i][r-1];
    else r-=v[i].size();
  }
}

 

loj 6282 数列分块入门 6

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

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