模板库

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]<<' ';
}

赞赏