6282 數列分塊入門 6

2021-08-28 04:18:46 字數 3201 閱讀 3247

題目鏈結

插入值過後整個分塊已經不是平均分配了,可能導致某一塊過大,需要重新build,將塊元素平均。

//第一行輸入乙個數字 n。

////第二行輸入 n 個數字,第 i 個數字為 ai ,以空格隔開。

////接下來輸入 n 行詢問,每行輸入四個數字 opt l r c,以空格隔開。

////若 opt=0,表示在第 l 個數字前插入數字 r (c 忽略)。

////若 opt=1,表示詢問 ar 的值(l 和 c 忽略)。

#pragma gcc optimize("ofast")

#pragma comment(linker, "/stack:102400000,102400000")

#pragma gcc target(sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx)

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define pi acos(-1)

#define s_1(x) scanf("%d",&x)

#define s_2(x,y) scanf("%d%d",&x,&y)

#define s_3(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define s_4(x,y,z,x) scanf("%d%d%d%d",&x,&y,&z,&x)

#define s_1(x) scan_d(x)

#define s_2(x,y) scan_d(x),scan_d(y)

#define s_3(x,y,z) scan_d(x),scan_d(y),scan_d(z)

#define pi acos(-1)

#define endl '\n'

#define srand() srand(time(0));

#define me(x,y) memset(x,y,sizeof(x));

#define foreach(it,a) for(__typeof((a).begin()) it=(a).begin();it!=(a).end();it++)

#define close() ios::sync_with_stdio(0); cin.tie(0);

#define for(x,n,i) for(int i=x;i<=n;i++)

#define for(x,n,i) for(int i=x;i=x;i--)

#define for(n,x,i) for(int i=n;i>x;i--)

#define w while

#define sgn(x) ((x) < 0 ? -1 : (x) > 0)

#define bug printf("***********\n");

#define db double

#define ll long long

#define mp make_pair

#define pb push_back

typedef long long ll;

typedef pair ii;

const int inf=(1<<31);

const ll linf=0x3f3f3f3f3f3f3f3fll;

const int dx=;

const int dy=;

const int maxn=1e6+10;

const int maxx=1e3+10;

const double eps=1e-8;

const double eps=1e-8;

const int mod=1e9+7;

templateinline t min(t a,t b,t c)

templateinline t max(t a,t b,t c)

templateinline t min(t a,t b,t c,t d)

templateinline t max(t a,t b,t c,t d)

template inline bool scan_d(t &ret)

while (c != '-' && (c < '0' || c > '9'))sgn = (c == '-') ? -1 : 1;ret = (c == '-') ? 0 : (c - '0');

while (c = getchar(), c >= '0' && c <= '9')ret *= sgn;return 1;}

inline bool scan_lf(double &num)else if(in=='.')

else num=in-'0';if(!isd)}

if(in!='.')else}

if(isn) num=-num;return true;}

void out(ll a)if(a >= 10) out(a / 10);putchar(a % 10 + '0');}

void print(ll a)

//freopen( "in.txt" , "r" , stdin );

//freopen( "data.txt" , "w" , stdout );

//cerr << "run time is " << clock() << endl;

int n,block,l[maxn],r[maxn],num,belong[maxn];

ll a[maxn],add[maxn],sum[maxn];

vectorseg[2005];

void reset()

//ll query(int x,int y)

// for(int i=belong[x]+1;itmp=ask(pos);

seg[tmp.first].insert(seg[tmp.first].begin()+tmp.second,val);

if(seg[tmp.first].size()>20*block) reset();}

void solve()

build();

for(1,n,i)

else }}

int main()

}

loj 6282 數列分塊入門 6

題目 傳送門 簡要題意 給出乙個長為 n的數列,以及 n個操作,操作涉及單點插入,單點詢問,資料隨機生成。題解 不得不說hzwer有點懶 好好打分塊 分塊的題實在是越來越噁心,越來越暴力了.第一反應就是硬插.然後重新分塊.感覺要爆.一發hzwer 結果.每次其實最多就影響兩個塊.爆?不存在的.然後就...

LOJ6282 數列分塊入門 6 分塊

給定乙個長為 n 的序列,有 n 次操作,每次可能在指定位置插入乙個數,或者詢問指定位置的數是多少,資料隨機 考慮到資料隨機,我們維護 sqrt n 個vector,每次操作的時候暴力掃一遍找到對應下標的位置即可 事實證明這樣 t 了,我們該用list,於是就過了 include using nam...

LOJ 6282 數列分塊6

題目大意 給定乙個由 n 個數組成的序列,維護兩種操作 單點詢問,單點插入。n 100000 題解 在塊內維護乙個鍊錶,支援動態插入數字,同時對於非隨即資料來說,若塊的大小過大,需要重構。注 對於 c vector 的 insert 函式的含義是在給定迭代器的後面插入數值。如下 include us...