社区讨论
define max致TLE?
学术版参与者 3已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @m52f957c
- 此快照首次捕获于
- 2024/12/24 20:07 去年
- 此快照最后确认于
- 2025/11/04 12:23 4 个月前
#include<bits/stdc++.h>
#define max(x,y) x<y?y:x
#define min(x,y) x>y?y:x
#define mmt(x,val) memset(x,val,sizeof(x))
// #define int long long
using namespace std;
const int N=4050;
char buf[1 << 20], *p1, *p2;
#define gc() \
(p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2) \
? EOF \
: *p1++)
inline int read()
{
int x=0,f=1;
char c=gc();
while (c<'0' || c>'9')
{
if (c=='-') f=-1;
c=gc();
}
while (c>='0' && c<='9')
{
x=x*10+c-'0';
c=gc();
}
return x*f;
}
int n,m;
struct lst{
int s[N],tg[N];
void change(int rt,int l,int r,int x,int y,int z)
{
if(x>r or y<l)
{
return;
}
s[rt]=max(s[rt],z);
if(l>=x and y>=r)
{
tg[rt]=max(tg[rt],z);
return;
}
int mid=(l+r)>>1;
change(rt<<1,l,mid,x,y,z);
change(rt<<1|1,mid+1,r,x,y,z);
}
int query(int rt,int l,int r,int x,int y)
{
if(x>r or y<l)
{
return 0;
}
if(l>=x and y>=r)
{
return s[rt];
}
int ss=tg[rt];
int mid=(l+r)>>1;
ss=max(query(rt<<1,l,mid,x,y),ss);
ss=max(query(rt<<1|1,mid+1,r,x,y),ss);
return ss;
}
}s[N],tg[N];
void change(int rt,int l,int r,int xa,int ya,int xb,int yb,int z)
{
if(l>ya or r<xa)
{
return;
}
s[rt].change(1,1,m,xb,yb,z);
if(l>=xa and ya>=r)
{
tg[rt].change(1,1,m,xb,yb,z);
return;
}
int mid=(l+r)>>1;
change(rt<<1,l,mid,xa,ya,xb,yb,z);
change(rt<<1|1,mid+1,r,xa,ya,xb,yb,z);
}
int query(int rt,int l,int r,int xa,int ya,int xb,int yb)
{
if(l>ya or r<xa)
{
return -1e9;
}
if(l>=xa and ya>=r)
{
return s[rt].query(1,1,m,xb,yb);
}
int ss=tg[rt].query(1,1,m,xb,yb);
int mid=(l+r)>>1;
ss=max(query(rt<<1,l,mid,xa,ya,xb,yb),ss);
ss=max(query(rt<<1|1,mid+1,r,xa,ya,xb,yb),ss);
return ss;
}
int q;
signed main()
{
// cin>>n>>m>>q;
n=read(),m=read(),q=read();
while(q--)
{
int a,b,c,d,e;
a=read(),b=read(),c=read(),d=read(),e=read();
c+=query(1,1,n,d+1,d+a,e+1,e+b);
change(1,1,n,d+1,d+a,e+1,e+b,c);
}
printf("%d\n",query(1,1,n,1,n,1,m));
}
/*
7 5 4
4 3 2 0 0
3 3 1 3 0
7 1 2 0 3
2 3 3 2 2
*/
#include<bits/stdc++.h>
// #define max(x,y) x<y?y:x
// #define min(x,y) x>y?y:x
#define mmt(x,val) memset(x,val,sizeof(x))
// #define int long long
using namespace std;
const int N=4050;
char buf[1 << 20], *p1, *p2;
#define gc() \
(p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2) \
? EOF \
: *p1++)
inline int read()
{
int x=0,f=1;
char c=gc();
while (c<'0' || c>'9')
{
if (c=='-') f=-1;
c=gc();
}
while (c>='0' && c<='9')
{
x=x*10+c-'0';
c=gc();
}
return x*f;
}
int n,m;
struct lst{
int s[N],tg[N];
void change(int rt,int l,int r,int x,int y,int z)
{
if(x>r or y<l)
{
return;
}
s[rt]=max(s[rt],z);
if(l>=x and y>=r)
{
tg[rt]=max(tg[rt],z);
return;
}
int mid=(l+r)>>1;
change(rt<<1,l,mid,x,y,z);
change(rt<<1|1,mid+1,r,x,y,z);
}
int query(int rt,int l,int r,int x,int y)
{
if(x>r or y<l)
{
return 0;
}
if(l>=x and y>=r)
{
return s[rt];
}
int ss=tg[rt];
int mid=(l+r)>>1;
ss=max(query(rt<<1,l,mid,x,y),ss);
ss=max(query(rt<<1|1,mid+1,r,x,y),ss);
return ss;
}
}s[N],tg[N];
void change(int rt,int l,int r,int xa,int ya,int xb,int yb,int z)
{
if(l>ya or r<xa)
{
return;
}
s[rt].change(1,1,m,xb,yb,z);
if(l>=xa and ya>=r)
{
tg[rt].change(1,1,m,xb,yb,z);
return;
}
int mid=(l+r)>>1;
change(rt<<1,l,mid,xa,ya,xb,yb,z);
change(rt<<1|1,mid+1,r,xa,ya,xb,yb,z);
}
int query(int rt,int l,int r,int xa,int ya,int xb,int yb)
{
if(l>ya or r<xa)
{
return -1e9;
}
if(l>=xa and ya>=r)
{
return s[rt].query(1,1,m,xb,yb);
}
int ss=tg[rt].query(1,1,m,xb,yb);
int mid=(l+r)>>1;
ss=max(query(rt<<1,l,mid,xa,ya,xb,yb),ss);
ss=max(query(rt<<1|1,mid+1,r,xa,ya,xb,yb),ss);
return ss;
}
int q;
signed main()
{
// cin>>n>>m>>q;
n=read(),m=read(),q=read();
while(q--)
{
int a,b,c,d,e;
a=read(),b=read(),c=read(),d=read(),e=read();
c+=query(1,1,n,d+1,d+a,e+1,e+b);
change(1,1,n,d+1,d+a,e+1,e+b,c);
}
printf("%d\n",query(1,1,n,1,n,1,m));
}
/*
7 5 4
4 3 2 0 0
3 3 1 3 0
7 1 2 0 3
2 3 3 2 2
*/
回复
共 6 条回复,欢迎继续交流。
正在加载回复...