#include
#include
#include
#include
#define ll long long
using namespace std;
int read()
{
int k=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) k=k*10+c-'0';return k*f;
}
const int N=40055;
ll n,m,mx[N<<2][2][2],a[N];
ll ans;
#define lson k<<1,l,mid
#define rson k<<1|1,mid+1,r
void pu(int k)
{
mx[k][0][0]=max(max(mx[k<<1][0][1],mx[k<<1][0][0])+mx[k<<1|1][0][0],mx[k<<1][0][0]+mx[k<<1|1][1][0]);
mx[k][0][1]=max(max(mx[k<<1][0][1],mx[k<<1][0][0])+mx[k<<1|1][0][1],mx[k<<1][0][0]+mx[k<<1|1][1][1]);
mx[k][1][0]=max(max(mx[k<<1][1][1],mx[k<<1][1][0])+mx[k<<1|1][0][0],mx[k<<1][1][0]+mx[k<<1|1][1][0]);
mx[k][1][1]=max(max(mx[k<<1][1][1],mx[k<<1][1][0])+mx[k<<1|1][0][1],mx[k<<1][1][0]+mx[k<<1|1][1][1]);
}
void build(int k,int l,int r)
{
if(l==r) {mx[k][1][1]=a[l];return;}
int mid=l+r>>1;
build(lson);build(rson);
pu(k);
}
void update(int k,int l,int r,int a,int b)
{
if(l==r) {mx[k][1][1]=b;return;}
int mid=l+r>>1;
if(a<=mid) update(lson,a,b);
else update(rson,a,b);
pu(k);
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;i++)
a[i]=read();
int x,y;
build(1,1,n);
for(int i=1;i<=m;i++)
{
x=read();y=read();
update(1,1,n,x,y);
ans+=max(mx[1][0][0],max(mx[1][0][1],max(mx[1][1][0],mx[1][1][1])));
}
printf("%lld\n",ans);
return 0;
}
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long LL;
typedef pair PII;
#define X first
#define Y second
#define mp make_pair
inline int read()
{
int x=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=x*10+c-'0';c=getchar();}
return x*f;
}
const int maxn=1010;
int n,A,B;
PII a[maxn];
int dp[maxn][maxn],ans;
int main()
{
n=read();
for(int i=1;i<=n;i++)A=read(),B=read(),a[i]=mp(A,B);
sort(a+1,a+n+1);
for(int i=1;i=a[i].X-a[k].X)
{
val=max(val,dp[k][i]);
k--;
}
dp[i][j]=val+a[j].Y;
ans=max(ans,dp[i][j]);
}
}
for(int i=1;i<=n/2;i++)swap(a[i],a[n-i+1]);
mem(dp,0);
for(int i=1;i=a[k].X-a[i].X)
{
val=max(val,dp[k][i]);
k--;
}
dp[i][j]=val+a[j].Y;
ans=max(ans,dp[i][j]);
}
}
printf("%d\n",ans);
return 0;
}
#include
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long LL;
typedef pair PII;
#define X first
#define Y second
#define mp make_pair
inline int read()
{
int x=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=x*10+c-'0';c=getchar();}
return x*f;
}
const int maxn=50010,inf=2e9;
int n,d,ans,A,B,Max[20][maxn],len[maxn];
PII a[maxn];
int query(int L,int R)
{
if(L>R)return inf;
int bin=len[R-L+1];
return max(Max[bin][L],Max[bin][R-(1<>1]+1;
for(int i=1;i<=n;i++)
{
int l=lower_bound(a+1,a+n,mp(a[i].X-d,0))-a,r=lower_bound(a+1,a+n,mp(a[i].X+d,inf))-a;
if(query(l,i)>=2*a[i].Y && query(i,r)>=2*a[i].Y)ans++;
}
printf("%d\n",ans);
return 0;
}
// luogu-judger-enable-o2
#include
#include
#include
#include
using namespace std;
const int N=100055;
inline int read()
{
int k=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) k=k*10+c-'0';return f*k;
}
int sum[N],n,m,dp[N],c[50],ans=-1;
int main()
{
m=read();n=read();
for(int i=0;i=n) continue;
for(int j=0;j>j)&1)) {int k=(upper_bound(sum+dp[i],sum+2+n,sum[dp[i]]+c[j])-sum-1);dp[i|(1<=n)
{
int sum=0;
for(int j=0;j>j)&1)) sum+=c[j];
ans=max(ans,sum);
}
cout<
===== L. Empty Stalls =====
=== 题意 ===
一个圆形的牛圈,每头牛有会从指定的位置开始往后走,直到找到一个空位置进去,问最后没有牛的编号最小的位置是哪个。
=== 题解 ===
模拟,直接从头开始走,转两圈就可以了
#include
#include
#include
#include
#define ll long long
using namespace std;
int read()
{
int k=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) k=k*10+c-'0';return k*f;
}
const int N=3000055;
int n,m,sum[N],vis[N];
int main()
{
n=read();m=read();
for(int i=1;i<=m;i++)
{
int X,Y,A,B;
X=read();Y=read();A=read();B=read();
for(int j=1;j<=Y;j++)
sum[(1ll*j*A+B)%n]+=X;
}
int now=0;
for(int i=0;i0)
{
for(int i=0;i