衝刺省選2月8日第十二場

2022-09-20 13:18:12 字數 1327 閱讀 6478

設 \(f_i\) 表示以 \(i\) 結尾的最大答案

發現只考慮當 \(a_i\) 是最大值時的轉移也是正確的

即 \(f_i=\max_^ \\)

因為若中間夾著個比 \(a_i,a_j\) 值都大的值的話肯定不會優

然後李超樹維護就行

首先,如果知道了序列的最大值 \(mx\),設詢問的集合為 \(s\),並且詢問 \(s\bigcup \),就可以知道集合所有元素與最大值的差

先考慮找到最大值,首先全體詢問得到極差 \(k\),然後二分字首得到 \(k\) 第一次出現的位置,即為最大值或最小值,設為 \(x\)

然後設 \(s_i\) 表示第 \(i\) 個二進位制位為 \(1\) 的數的集合,詢問 \(s_i\) 和 \(s\bigcup \) 得到與 \(x\) 的差

然後就能得到 \(a_i\)與 \(x\) 的差

\(qry1\) 詢問差最大的那個數並與 \(x\) 比較,就能確定 \(x\) 是最大還是最小

t1

#include#includeusing namespace std;

#define il inline

#define int long long

const int n=1e6+11;

const int inf=1e18;

struct seg_

seg_(int k_,int val_)

};struct treetre[n*4];

int n,c;

int a[n];

il int pd(int x)

il int max_(int x,int y)

int get_ans(seg_ a,int x)

bool check(seg_ a,seg_ b,int x)

void ins(int i,int l,int r,seg_ x)

if(check(tre[i].x,x,mid))swap(tre[i].x,x);

if(l==r)return;

if(check(tre[i].x,x,r))ins(i<<1|1,mid+1,r,x);

if(check(tre[i].x,x,l))ins(i<<1,l,mid,x);

}int qry(int i,int l,int r,int x)

signed main()

}return x;

}setpop(seta,setb)return a;

}void find(int n,int m1,int m2)

for(int i=0;i<8;++i)

} for(int i=0;i}

12月2日衝刺報告

這個作業屬於哪個課程 這個作業要求在 homework 11541 這個作業的目標 開發 今天完成了什麼內容?搜尋介面一部分 翌日的計畫?完成搜尋介面 還剩下哪些任務?完成搜尋介面 今日開發中遇到了哪些困難?暫無在今日的開發中有哪些收穫 疑問?暫無今日燃盡圖 1.今天完成了什麼內容?完善前端的內容 ...

2月8日 語句

1。switch 表示式 表示式可以是整形,字元型,列舉型 int a int在外部定義 a 65 float型別就不對了 2。do 語句 while 表示式 和while 語句有什麼區別 先進迴圈,後判斷 第二個是先判斷 include using namespace std int main c...

2023年8月2日筆記

圖形演示 命令操作 1 tcp ip架構 協議概述 圖 2 內部命令與外部命令 圖 3 查詢幫助資訊 a help 命令分類 1 內部命令 help command 2 外接命令 command help h b man more man cmmand 向下查詢指定內容 ubuntu n 向下查詢 ...