題目鏈結
插入值過後整個分塊已經不是平均分配了,可能導致某一塊過大,需要重新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...