二分查找:
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==4){
cout<<mid<<endl;
break;
}
if(a[mid]>4){
r=mid-1;
}
else{
l=mid+1;
}
}
前缀和:
#include<bits\stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> a(n+1),pre(n+1,0);
for(int i=1;i<=n;i++){
cin>>a[i];
pre[i]=pre[i-1]+a[i];
}
int q,l,r;
cin>>q;
while(q--){
cin>>l>>r;
cout<<pre[r]-pre[l-1]<<endl;
}
return 0;
}
差分
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> a(n+1),pre(n+2,0);
for(int i=1;i<=n;i++){
cin>>a[i];
}
int Q,l,r,x;
cin>>Q;
while(Q--){
cin>>l>>r>>x;
pre[l]+=x;
pre[r+1]-=x;
}
for(int i=1;i<=n;i++){
pre[i]+=pre[i-1];
a[i]+=pre[i];
}
for(int i=1;i<=n;i++){
cout<<a[i]<<endl;
}
return 0;
}
lower_bound(),upper_bound():
#include<bits\stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int x;
cin>>x;
cout<<"a中第一个大于等于"<<x<<"的下标是"<<lower_bound(a+1,a+n+1,x)-a;
cout<<"a中第一个大于"<<x<<"的下标是"<<upper_bound(a+1,a+n+1,x)-a;
return 0;
}
``
################(vector类型)
void main()
{
vector<int> t;
t.push_back(1);
t.push_back(2);
t.push_back(3);
t.push_back(4);
t.push_back(6);
t.push_back(7);
t.push_back(8);
int low=lower_bound(t.begin(),t.end(),5)-t.begin();
int upp=upper_bound(t.begin(),t.end(),5)-t.begin();
cout<<low<<endl;
cout<<upp<<endl;
system("pause");
}