描述
有\(n\)隻熊,初始時座標為\((x_i,y_i)\);
這些熊會按照標號依次吼叫,當第\(i\)隻熊吼叫,其他熊會移動;
\((x_i,y_i)\)會移動到\((x_i \pm 1,y_i \pm 1)\)離吼叫的熊歐幾里得距離最小的位置;
問當第\(i\)隻熊生病了,不吼叫也不移動,其他的熊依次吼叫後的\(\sum_^x_iy_i\);
依次輸出\(ans_i\);
範圍\(2 \le n \le 2.5 \times 10^5 \ , \ 1 \le x_i ,y_i \le 10^6\)
考慮如何維護這些區間的變化;
由於一次變化後,所有被影響到的區間一定是在左端點或者右端點;
在每個區間的左端點記錄\(right\)集合,對右端點記錄\(left\)集合;
對於在\(pos_i\)左邊的區間的\(left\),顯然可以直接加到\(j\)的\(right\)上;
右邊區間的\(right\)同理;
對於左邊區間的\(right\),可以發現在變化過後所有的區間變成了相同的區間,並查集合並即可
右邊區間的\(left\)和跨越\(pos_i\)的的區間同理;
上述過程可以簡單鍊錶+並查集實現,查詢包含的區間可以用\(set\)維護;
$part \ 3 $
考慮如何求最終的答案;
先預處理乙個正常情況下的答案;
對於每個熊,設正常情況下最終位置為:\((x_i,y_i)\),相當於變成了\((x_i \pm 1, y_i \pm 1)\);
\((x_i+a)(y_i+b) - x_iy_i \ = \ ax_i + by_i + ab\);
字首和維護\(ax_i\)和\(by_i\)再加個二維數點維護\(ab\)即可;
#include#define ll long long
#define mk make_pair
#define fir first
#define sec second
using namespace std;
const int n=1000010;
int n,px[n],py[n],idx[n],idy[n],dx[n],dy[n],p[n],rk[n];
int fa[n],pre[n],nxt[n],nt[n],sz,sta[n],top;
int lx[n],rx[n],ly[n],ry[n],lx0[n],rx0[n],ly0[n],ry0[n],tx[n],ty[n],rkx[n],rky[n];
ll sumx[n],sumy[n],pre_ans;
inline char gc()
inline int rd()
inline bool cmpx(const int&a,const int&b)
}else
for(;j;j=nt[j])fa[find(j)]=find(i);
for(j=now.r.hd;j&&p[j]<=pos;j=nt[j])fa[find(j)]=find(i);
if(j)
}} link(tmp.l,i);
s.erase(st,ed);
s.insert(mk(l,i));
} st=s.begin();ed=s.end();
for(i=st;i!=ed;++i)
s.erase(st,ed);
for(int i=1;i<=n;++i)if(find(i)!=i)l[i]=l[fa[i]],r[i]=r[fa[i]];
}struct tree
int que(int k,int lst,int l,int r,int x,int y)
void insert(int x,int y)
int query(int lx,int rx,int ly,int ry)
}t;void pre_cal()
ll cal(int id,int lx,int rx,int ly,int ry)
int main()
sort(idx+1,idx+n+1,cmpx);
sort(idy+1,idy+n+1,cmpy);
for(int i=1;i<=n;++i)
for(int i=1;i<=n;++i)t.insert(i,rky[idx[i]]);
memset(lx,-1,sizeof(lx));
memset(rx,-1,sizeof(rx));
memset(ly,-1,sizeof(ly));
memset(ry,-1,sizeof(ry));
solve(rkx,dx,lx,rx,lx0,rx0);
solve(rky,dy,ly,ry,ly0,ry0);
pre_cal();
for(int i=1;i<=n;++i)
return 0;
}
紀中集訓2019 11 05
題目鏈結 有 n 個點,求 n 1 個完美匹配,且其中不出現相同的邊。n le 10 3 打暴力 手玩找到規律。把匹配放到方格圖上,給屬於同乙個完美匹配的方格染上同樣的顏色,發現兩個性質 最後一列第一行填 n 之後往下從小到大填完偶數,再從小到大填完奇數 forall i in 1,n 1 從 1,...
紀中集訓 遊戲
題目鏈結 是紀中的題,不過我已經沒有紀中的號了,於是翻出了我的古早部落格 複習的時候又做了一遍,還是想了一會兒的,並且由衷地覺得這真是一道好題。考慮 sg 函式遞推。由於每次操作只能動最後一行和最後一列,那麼設 sg i,j 表示以 i,j 結尾的矩陣的 sg 函式值。轉移有 sg i,j mex ...
紀中集訓2019 3 21 橋
描述 有 m 條河,每條河的兩邊有居民點,所以共有 m 1 排居名點 如果要從一排居名點到另一排相鄰的居民點需要過河 現在有 n 個人,每個人的起點座標是 p s 終點 q t 你可以在每條河上修建一座橋,過河必須通過橋 相鄰居民點距離為 1 不考慮過河的時間 問 n 個人到終點的路徑之和最小是多少...