一:快速
#include<iostream>
using namespace std;
const int N=1000010;
int n;
int q[N];
void quick_sort(int q[],int l,int r)
{
if(l>=r)return;
int x=q[l+r>>1],i=l-1,j=r+1;
while(i<j)
{
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if (i<j)swap(q[i],q[j]);
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main()
{
cin >>n;
for(int i=0;i<n;i++)cin >> q[i];
quick_sort(q,0,n-1);
for(int i=0;i<n;i++)cout << q[i] << ' ';
return 0;
}
二:归并
#include<iostream>
using namespace std;
const int N=1000010;
int n;
int q[N],tmp[N];
void merge_sort(int q[],int l,int r)
{
if(l>=r)return;
int mid=l+r>>1;
merge_sort(q,l,mid),merge_sort(q,mid+1,r);
int k=0,i=l,j=mid+1;
while(i<=mid && j<=r)
{
if(q[i]<q[j])tmp[k++]=q[i++];
else tmp[k++]=q[j++];
}
while(i<=mid) tmp[k++]=q[i++];
while(j<=r) tmp[k++]=q[j++];
for(i=l,j=0;i<=r;i++,j++)q[i]=tmp[j];
}
int main()
{
cin>> n;
for(int i=0;i<n;i++)cin >> q[i];
merge_sort(q,0,n-1);
for(int i=0;i<n;i++)cout << q[i] << ' ';
return 0;
}
三:二分
#include<iostream>
using namespace std;
const int N=1000010;
int n,m;
int q[N],s[N];
int main()
{
cin>> n>>m;
for(int i=0;i<n;i++)cin >> q[i];
int l=0,r=n-1;
while(m--)
{
int x;
cin>> x;
int l=0,r=n-1;
while(l<r)
{
int mid=l+r>>1;
if(q[mid]>=x)r=mid;
else l=mid+1;
}
if(q[l]!=x)cout << "-1 -1"<<endl;
else
{
cout << l << ' ';
int l=0,r=n-1;
while(l<r)
{
int mid=l+r+1>>1;
if(q[mid]<=x)l=mid;
else r=mid-1;
}
cout << l << endl;
}
}
return 0;
}
四:前缀和
注意从1开始 <=n
#include<iostream>
using namespace std;
const int N=1000010;
int n,m;
int a[N],s[N];
int main()
{
cin >> n >> m;
for(int i=1;i<=n;i++)cin >> a[i];
for(int i=1;i<=n;i++)s[i]=s[i-1]+a[i];
while(m--)
{
int l,r;
cin >> l>>r;
printf("%d\n",s[r]-s[l-1]);
}
return 0;
}
五:双指针
把whlie 写成了if 结果只过了 4个检测点…
#include<iostream>
using namespace std;
const int N=1000010;
int n;
int a[N],s[N];
int main()
{
cin>> n;
for(int i=0;i<n;i++)cin >> a[i];
int res=0;
for(int i=0,j=0;i<n;i++)
{
s[a[i]]++;
while(s[a[i]]>1)
{
s[a[j]]--,j++;
}
res=max(res,i-j+1);
}
cout << res<<endl;
return 0;
}
六:位运算
void类型函数 不用返回值,或者return; 表示返回为空。
如果有函数类型的话,必须有个返回值,比如说
int lowbit(int x)
{
return x&-x;
}
这时候就不是返回空了
#include<iostream>
using namespace std;
const int N=100010;
int lowbit(int x)
{
return x&-x;
}
int main()
{
int n;
cin>>n;
while(n--)
{
int x;
cin>> x;
int res=0;
while(x)x-=lowbit(x),res++;
cout << res<< ' ';
}
return 0;
}