rt。
st表
#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
int res=0,fs=1; char c=getchar();
while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
return res*fs;
}
void print(int x){
if(x<0) { putchar('-'); x=-x;}
if(x>9) print(x/10);
putchar(x%10+'0');
}
int n,cnt,m,a[100010],ans,tmp,lg[101001],st[101011][40];
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++){
// cin>>a[i];
a[i]=read();
}
lg[1]=0;
for(int i=2;i<=n;i++){
lg[i]=lg[i/2]+1;
}
for(int i=n;i>=1;i--){
for(int j=0;j<=log2(n);j++){
if(i+(1<<j-1)>n) break;
if(j==0) st[i][0]=a[i];
else{
st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
}
}
while(m--){
int l,r;
l=read(),r=read();
int x=lg[r-l+1];
cout<<max(st[l][x],st[r-(1<<x)+1][x])<<'\n';
}
return 0;
}
01背包
/*writer:houpingze 绿√*/
#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
int res=0,fs=1; char c=getchar();
while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
return res*fs;
}
void print(int x){
if(x<0) { putchar('-'); x=-x;}
if(x>9) print(x/10);
putchar(x%10+'0');
}
int n,cnt,m,a,ans,tmp,w[101],v[101],f[111][1111];
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
if(j>=v[i]) f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]);
else f[i][j]=f[i-1][j];
}
}
cout<<f[n][m];
return 0;
}
快速排序
#include<iostream>
#include<bits/stdc++.h>
#include <ctime>
typedef unsigned long long ull;
using namespace std;
int n,cnt,m;
short a[5000*8000];
bool cmp(int x,int y){return x<y;}
void akioi(short a[],int l,int r){
int i=l,j=r,mid=a[(l+r)/2];
while(i<=j){
while(cmp(a[i],mid)) i++;
while(cmp(mid,a[j])) j--;
if(i<=j) swap(a[i],a[j]),i++,j--;
}
if(l<j) akioi(a,l,j);
if(i<r) akioi(a,i,r);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) a[i]=rand()%3892,srand(time(0)+i);
cout<<"OK!\n";
akioi(a,1,n);
for(int i=1;i<=n;i++) cout<<a[i]<<' ';
}