problem a
題意:詢問1~n最長區間使得1~n任意子區間詢問都有數列的最小值在同一位置。
被隊友教會了。
假設p為所求的答案,檢查當前p是否合法,由於p具有當前不合法,p+1~n都不可能合法的性質,所以可以使用二分,若當前p合法,那麼二分左指標右移,否則右指標左移。
o(n*logn)st表維護兩個陣列各自的區間最小下標,這樣每次都可以做到o(1)查詢
然後判斷當前p是否合法的方法是首先判斷1~p兩個數的最小值下標是否相同。
如果相同,假設這個下標為m,我們可以得知分別處於m兩邊的l,r的最小值下標一定是m,所以我們只需判斷【1,m-1】,【m+1,p】是否合法即可,於是就遞迴著做就可以,一旦出現乙個乙個不合法就返回false,二分找下乙個可行的p
#include#include#includeusing namespace std;
#define ll long long
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define for0(i,a,b) for (int i=a;ir) return true;
else if ( query(l,r) )
return false;
}int main()
printf("%d\n",r);
}return 0;
}
problem b數理完蛋。
從這題得出的結論是:
①積分內的常數可以直接移到外面
②積分n項的積不能先各自積分再求積,累加的話是可以的。
③④累乘變累加:
之後就是求逆元,累加就完事了
#include#include#includeusing namespace std;
#define ll long long
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define for0(i,a,b) for (int i=a;i>= 1;
a = a*a%mod;
}return ans;
}ll geta(int idx)///求得當前下標對應的分母一坨值
sum = sum*a[idx]%mod*2%mod;
return (sum+mod)%mod; ///上面涉及減法,最後記得加個這個
}int main()
return 0;
}
problem f向量叉積求三角形:假設兩條邊的向量為那麼面積 = (順便說一下三維的兩條邊叉乘可以求體積v =
網上盜圖:
然後期望到底是面積的幾分之幾直接爆交猜,emm
等於三角形面積的11/18,就當結論記住吧。
#include#include#includeusing namespace std;
#define ll long long
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define for0(i,a,b) for (int i=a;iproblem j
除法變乘法,涉及到大數的操作
把1e18的拆成1e9的大位,1e9的小位即可。
#include#include#include#includeusing namespace std;
#define ll long long
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define for0(i,a,b) for (int i=a;i");
else printf("%s\n",(x1");
}return 0;
}
之後隨緣補遼,有太多的東西不會了o(╥﹏╥)o 牛客暑期多校訓練營B Boundary
給定n個點,然後確定乙個過原點的圓,要使這n個點盡可能多的存在與圓上,最後輸出最多的存在於圓上的點的個數 三點確定乙個圓,我們已知這個圓必定經過原點,所以再依次利用三點求圓心的公式列舉每兩個點與原點 三點不共線 確定的圓心,最後選擇確定次數最多的圓心構成的圓 include include incl...
2019牛客暑期多校訓練營(第一場)
題意 題解 c 版本一 題意 題解 c 版本一 題意 題解 c 版本一 題意 題解 c 版本一 題意 題解 c 版本一 題意 題解 數學 計算幾何 邏輯推理 c 版本一 題解 特例 正三角形 取重心 中點 頂點,則期望為 公式 author stzg language c include inclu...
2019牛客暑期多校訓練營(第九場)
d knapsack cryptosystem 折半搜尋,晚上又去看了挑戰程式設計,對於時間複雜度高的情況,可以通過犧牲空間來降低時間複雜度。先把前半部分所有可以組合的情況列舉出來,然後對於後半部分依次列舉,那麼複雜度變化為o 2 36 o 2 18 2 18log 18 顯然就可做了,折半的裸題。...