2023年 1月5日 OJ習題 二分

2021-10-01 22:32:58 字數 4180 閱讀 8835

這題可以二分查詢,但是也可以直接用int ans=upper_bound(a,a+n,x)-a找出答案!!!

#include

using

namespace std;

const

int n=

1e6+5;

int a[n]

;int

main()

int ans=

upper_bound

(a,a+n,x)

-a;//c++自帶,直接用於找第乙個大於x的數的下標//

cout<

}return0;

}

自己寫二分查詢(這裡借用nefu_liw的**)

#include

using

namespace std;

int n,x,i,l,r,m,a[

1000010];

intseek

(int l,

int r,

int cmp)

return r+1;

}int

main()

return0;

}

常規的二分查詢,模板題!!!

但是有一點要注意,二分的過程要寫成函式,放在主函式外面,否則可能會tle。。。。。。

#include

using

namespace std;

const

int n=

1e6+5;

int a[n]

;int n,q,l,r,m,k;

bool

panduan

(int l,

int r,

int k)

return0;

}int

main()

while

(q--)}

return0;

}

#include

using

namespace std;

doublef(

double x)

double

erfen

(double l,

double r,

double y)

return m;

}int

main()

return0;

}

不用二分,桶排打標記即可!!!

#include

using

namespace std;

intmain()

for(

int i=

1;i<=max/

2;i++

)//為了不ole,這裡i要小於等於最大值的一半,否則陣列會越界,另一種解決辦法是,定義陣列是定義大一倍,也可以//

printf

("%d\n"

,count);}

break;}

return0;

}

#include

using

namespace std;

double pi=

acos(-

1);//π用acos(-1.0)表示//

doublef(

int h,

double r)

double

seek

(double l,

double r,

int h)

return m;

}int

main()

return0;

}

找符合條件的最大!!!

#include

using

namespace std;

int n,k,ans,l,r,mid,li[

10010];

bool

check

(int mid)

return count>=k;

}int

main()

l=0,r=

1e7;

while

(l<=r)

cout<

}return0;

}

分成幾段 ,,;這裡分成了5段; 每段都 <=500;

500是很多成功分段方案中,每段的最大值當中最小的一組;

#include

using

namespace std;

const

int n=

1e5+5;

int n,k;

int a[n]

;int

check

(int x)

}//if(flag==0)這裡發現了一處錯誤,不需要判斷是否flag等於0,都要count++,因為flag=0時自不必說,表示最後一輪得到的s<=x,但是當flag=1時,說明最後一輪的s是大於x的,因此count++了一次,但是現在s又是a【i】了,不過flag並沒有變回0,因為恰好結束了迴圈,因此還是應該在迴圈外面再加一次的

count++;if

(count>k)

return1;

else

return0;

}int

main()

int l=maxn,r=sum,mid=0;

while

(l<=r)

} cout<

}return0;

}

#include

using

namespace std;

const

int n=

1e5+5;

int n,k,a[n]

;double t;

bool

check

(int mid)

return count>=k;

}int

main()

int l=

0,r=max,mid,ans=0;

while

(l<=r)

else

r=mid-1;

}printf

("%.2lf\n"

,ans/

100.00);

}return0;

}

與賣古董是乙個道理

#include

using

namespace std;

const

int n=

1e5+5;

int n,k;

int a[n]

;int

check

(int x)}if

(flag==0)

count++;if

(count>k)

return1;

else

return0;

}int

main()

int l=maxn,r=sum,mid=0;

while

(l<=r)

} cout<

return0;

}

僅僅是再排一下序就ok了

#include

using

namespace std;

const

int n=

2e6+5;

int a[n]

;int

main()

sort

(a+1

,a+1

+n);

int ans=

upper_bound

(a+1

,a+1

+n,x)

-(a+1)

; cout<

}return0;

}

2023年2月8日 OJ習題

這類題的常規思路是結構體排序,但是本題由於並沒有多種元素,因此用不著結構體,僅僅是陣列排序就可以 include using namespace std int n,m,o int f 110 bool cmp int a,int b intmain return0 先打表,然後直接些就好了 inc...

2023年2月18日 林大OJ習題 set

set相當於乙個自動排序 自動去重的陣列,即插入時會自動排序,插入重複元素時不會變化。set的元素訪問需要用到迭代器,其原理可以模擬普通迴圈中的迴圈變數i。set的模版題,set的特點在排序和去重。include using namespace std set int a intmain print...

2023年2月13日 林大OJ習題 優先佇列

優先佇列是一種特殊的佇列,當元素入隊時不一定排在隊尾,而是根據規定的優先順序順序插入到不同的位置,相當於每插入乙個元素時根據優先順序對所有元素重新排序。規定優先順序的方式與sort函式相似,用greater與less,需要注意的是含義相反。priority queue int,vector int ...