lt2025 攀爬者
排序以后大力模拟即可,水题,没什么好讲的。
lt2027 蜈蚣
暴力的做法是维护前缀异或和然后大力DP
注意\(f_{i}{0}\)是不可选取的。
还有注意卡常。
lt2005 区间方差
简单于lp1471 方差,注意多膜。
传参数的时候注意参数的位置。
lt2061 最大差值
找到后缀最大值,找到前缀最小值,扫一遍求差。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
/*
lt2025 攀爬者
*/
struct data{
int x;
int y;
int z;
bool operator<(const data &B)const{
return z<B.z;
}
}a[50005];
inline double calc(int A,int B){
return sqrt((a[A].x-a[B].x)*(a[A].x-a[B].x)+(a[A].y-a[B].y)*(a[A].y-a[B].y)+(a[A].z-a[B].z)*(a[A].z-a[B].z));
}
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
}
sort(a+1,a+1+n);
double ans=0;
for(int i=1;i<n;++i){
ans+=calc(i,i+1);
}
printf("%.3lf",ans);
}
#include<iostream>
#include<cstdio>
using namespace std;
#define INF 1000000000
/*
lp2027 蜈蚣
*/
int n,m,a[1005],f[1005][105],sm[1005];
inline int Max(int A,int B){
return A>B?A:B;
}
inline int Min(int A,int B){
return A<B?A:B;
}
void init(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
}
sm[0]=0;
for(int i=1;i<=n;++i){
sm[i]=sm[i-1]^a[i];
f[i][0]=-INF;
}
int mn;
for(register int i=1;i<=n;++i){
mn=Min(i,m);
for(register int j=1;j<=mn;++j){
for(register int k=j-1;k<i;++k){
f[i][j]=Max(f[i][j],f[k][j-1]+(sm[i]^sm[k]));
//printf("[%d,%d,%d]%d ",i,j,k,f[i][j]);
}
//printf(",");
}
//puts("");
}
printf("%d\n",f[n][m]);
}
int main(){
init();
return 0;
}
#include<iostream>
#include<cstdio>
using namespace std;
#define LEN (R-L+1)
#define MID ((L+R)>>1)
#define LLEN (MID-L+1)
#define RLEN (R-MID)
#define LS (X<<1)
#define RS (X<<1|1)
#define cIz 1000000007
/*
lt2005 区间方差
*/
typedef long long ll;
struct data{
ll sm;
ll sm2;
}tr[270005];//262141
inline ll pw(ll X,ll A){
ll rt=1;
while(X){
if(X&1){
rt*=A;
rt%=cIz;
}
X>>=1;
A*=A;
A%=cIz;
}
return rt;
}
inline ll inv(ll X){
return pw(cIz-2,X);
}
inline void updt(int X){
tr[X].sm2=(tr[LS].sm2+tr[RS].sm2)%cIz;
tr[X].sm=(tr[LS].sm+tr[RS].sm)%cIz;
}
inline void chg(int X,int L,int R,int A,ll K){
if(L==R){
tr[X].sm=K;
tr[X].sm2=K*K%cIz;
return;
}
if(A<=MID){
chg(LS,L,MID,A,K);
}else{
chg(RS,MID+1,R,A,K);
}
updt(X);
}
inline ll qrySm(int X,int L,int R,int A,int B){
if(L>=A&&R<=B){
return tr[X].sm;
}
ll rt=0;
if(A<=MID){
rt+=qrySm(LS,L,MID,A,B);
}
if(B>MID){
rt+=qrySm(RS,MID+1,R,A,B);
}
return rt%cIz;
}
inline ll qrySm2(int X,int L,int R,int A,int B){
if(L>=A&&R<=B){
return tr[X].sm2;
}
ll rt=0;
if(A<=MID){
rt+=qrySm2(LS,L,MID,A,B);
}
if(B>MID){
rt+=qrySm2(RS,MID+1,R,A,B);
}
return rt%cIz;
}
int n,m;
ll a[100005];
inline void build(int X,int L,int R){
if(L==R){
tr[X].sm=a[L];
tr[X].sm2=(a[L]*a[R])%cIz;
return;
}
build(LS,L,MID);build(RS,MID+1,R);
updt(X);
}
void init(){
scanf("%d%d",&n,&m);
ll x;
for(int i=1;i<=n;++i){
scanf("%d",a+i);
}
build(1,1,n);
int op,loc,l,r;
while(m--){
scanf("%d",&op);
if(op==1){
scanf("%d%lld",&loc,&x);
chg(1,1,n,loc,x);
}else if(op==2){
scanf("%d%d",&l,&r);
x=qrySm(1,1,n,l,r);
printf("%lld\n",(qrySm2(1,1,n,l,r)-x*x%cIz*inv(r-l+1)%cIz+cIz)*inv(r-l+1)%cIz);
}
}
}
int main(){
init();
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
/*
lt2061 最大差值
*/
inline int Max(int A,int B){
return A>B?A:B;
}
inline int Min(int A,int B){
return A<B?A:B;
}
int n,a[1000005],mx[1000005],mn[1000005],ans=0;
void init(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
}
memset(mn,0x3f,sizeof(mn));
for(int i=1;i<=n;++i){
mn[i]=Min(mn[i-1],a[i]);
}
for(int i=n;i>=1;--i){
mx[i]=Max(mx[i+1],a[i]);
}
for(int i=1;i<=n;++i){
ans=Max(mx[i]-mn[i],ans);
}
printf("%d",ans);
}
int main(){
init();
return 0;
}