题解:CF2065C1 Skibidus and Fanum Tax (easy version)
简单题,建议橙。
提供一种逆序遍历的做法。
我们从后往前看,假如
Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
#define _reps(i,a,b,c) for(int i=(a);i<=(b);c)
#define _rrep(i,a,b) for(int i=(a);i>=(b);--i)
#define _rreps(i,a,b,c) for(int i=(a);i>=(b);c)
#define _graph(i) for(int i=head[u];i;i=e[i].nxt)
#define FRR(file) freopen(file,"r",stdin)
#define FRW(file) freopen(file,"w",stdout)
#define pb push_back
#define mk make_pair
#define fst first
#define snd second
#define pc putchar('\n')
#define nowtime (double)clock()/CLOCKS_PER_SEC
int in(){int k=0,kk=1;char a=getchar();while(!isdigit(a)){if(a=='-') kk=-1;a=getchar();}while(isdigit(a))k=(k<<3)+(k<<1)+a-'0',a=getchar();return k*kk;}
void out(int a){if(a<0) putchar('-'),a=-a;if(a>9) out(a/10);putchar('0'+a%10);}
const int N = 2e5 + 5, M = 2;
int a[N],b[M];
signed main(){
int t;
t=in();
while(t--){
int n = in(), m = in(), flag = 1;
_rep(i,1,n) a[i] = in();
_rep(i,1,m) b[i] = in();
_rrep(i,n,1){
if(i!=n&&a[i]>a[i+1]){
if(b[1]-a[i]<=a[i+1] )a[i] = b[1]-a[i];
else {flag = 0; break;}
}else if(b[1]-a[i]>a[i]&&(i==n||b[1]-a[i]<=a[i+1])) a[i] = b[1]-a[i];
}
if(flag) printf("Yes\n");
else printf("NO\n");
}
return 0;
}