這題可以二分查詢,但是也可以直接用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 ...