–本來是很難,但是總有優秀的大佬加神牛犇活在這個世界上
首先不用n^2列舉a和b,
某位大佬說:
a和b其實就是
1 * (m-i+1),2 * (m-i+1),3 * (m-i+1),4 * (m-i+1)。。。。
(哇,我咋不知道呢qaq)
那麼用並查集建一棵樹就好了
樹邊就是連線他們的 i
然後好像有什麼優化?——小樹連大樹(按秩合併)
最後跑對於每個詢問的x和y,跑lca,找到連線他們的所有邊的連通時間的最大值
就是答案啦啦啦
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=100005;
int n,m,q;
int f[maxn],s[maxn];
int l[maxn];
int d[maxn];
int find(int x)
int lca(int x,int y)
return f[x];
}int final(int x,int y,int d)
while(y!=d)
return ans;
}int main()
for(int i=1;i<=m;i++)
else}}
for(int i=1;i<=q;i++)
return
0;}
CF578B Or Game(貪心)題解
現在有n個數 a 1,a 2,a 3,a n 你最多可以進行k次操作,每次操作你可以將其中乙個數乘以 x 使得 a 1 a 2 a n 最大。貪心 字首字尾 首先明確 答案的這 k 次 times x 操作用都會在同乙個數身上。因為 x 大於 2 所以每次相乘都會使得該數的二進位制為至少左移一位,或...
578 查詢回答率最高的問題
即乙個問題show之後,可能是被answer了,也可能是被skip了,所以求回答率。其實思路都是一致的,求出回答次數 出現次數即可 題解一 select question id as survey log from select question id,sum case when action an...
JZOJ 交換 模擬
給出字串s和字串t,現在你要把s的某乙個字元和t的某乙個字元交換,使得交換之後的s至少要有三個連續相同的字元,交換之後的t也要有三個連續相同的字元。問有多少種不同的交換方式。第一行,乙個字串s。s只含有 r g b 三種字元,長度不超過50,不小於3。而且s任意兩個相鄰的字元都不相同。第二行,乙個字...