社区讨论
WA--->AC?
AT_dp_wIntervals参与者 8已保存回复 22
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 22 条
- 当前快照
- 1 份
- 快照标识符
- @mhjd7fii
- 此快照首次捕获于
- 2025/11/04 00:39 4 个月前
- 此快照最后确认于
- 2025/11/04 06:12 4 个月前
这是AC的代码:
CPP#include<bits/stdc++.h>
#define int long long
#define N 4000005
using namespace std;
int tree[N<<2];
int mx[N<<2];
int tag[N<<2];
int ls(int p){
return p<<1;
}
int rs(int p){
return p<<1|1;
}
void push_up(int p){
tree[p]=tree[ls(p)]+tree[rs(p)];
mx[p]=max(mx[ls(p)],mx[rs(p)]);
return;
}
void addtag(int p,int pl,int pr,int d){
tree[p]+=(pr-pl+1)*d;
tag[p]+=d;
mx[p]+=d;
return;
}
void push_down(int p,int pl,int pr){
if(tag[p]){
int mid=(pl+pr)>>1;
addtag(ls(p),pl,mid,tag[p]);
addtag(rs(p),mid+1,pr,tag[p]);
tag[p]=0;
return;
}
}
void update(int p,int L,int R,int pl,int pr,int d){
if(L<=pl&&pr<=R){
addtag(p,pl,pr,d);
return;
}
int mid=(pl+pr)>>1;
push_down(p,pl,pr);
if(L<=mid){
update(ls(p),L,R,pl,mid,d);
}
if(R>mid){
update(rs(p),L,R,mid+1,pr,d);
}
push_up(p);
}
int query(int p,int L,int R,int pl,int pr){
if(L<=pl&&pr<=R){
return mx[p];
}
int mid=(pl+pr)>>1,res=-1e14;
push_down(p,pl,pr);
if(L<=mid){
res=max(res,query(ls(p),L,R,pl,mid));
}
if(R>mid){
res=max(res,query(rs(p),L,R,mid+1,pr));
}
return res;
}
struct node{
int k,w;
};
int dp[N];
vector<node> vecl[N];
vector<node> vecr[N];
int l[N],r[N],a[N];
void build(int p,int pl,int pr){
if(pl==pr){
mx[p]=-1e14;
return;
}
int mid=(pl+pr)>>1;
build(ls(p),pl,mid);
build(rs(p),mid+1,pr);
push_up(p);
}
signed main(){
int n,m;
cin>>n>>m;
build(1,0,n);
for(int i=1;i<=m;i++){
cin>>l[i]>>r[i]>>a[i];
vecl[l[i]].push_back(node{r[i],a[i]});
vecr[r[i]].push_back(node{l[i],a[i]});
}
int mmax=0;
for(int i=1;i<=n;i++){
// cout<<"i:"<<i<<endl;
// for(int j=0;j<=10;j++){
// cout<<query(1,j,j,0,N)<<" ";
// }
// cout<<endl;
for(int j=0;j<vecr[i-1].size();j++){
node p=vecr[i-1][j];
update(1,0,p.k-1,0,N,-p.w);
//cout<<0<<" "<<p.k-1<<" "<<-p.w<<endl;
}
for(int j=0;j<vecl[i].size();j++){
node p=vecl[i][j];
update(1,0,i-1,0,N,p.w);
//cout<<0<<" "<<i-1<<" "<<p.w<<endl;
}
// for(int j=0;j<=10;j++){
// cout<<query(1,j,j,0,N)<<" ";
// }
// cout<<endl;
//cout<<"query:"<<0<<"---"<<i-1<<" "<<query(1,0,i-1,0,N)<<endl;
dp[i]=query(1,0,i-1,0,N);
//cout<<"dp i:"<<dp[i]<<endl;
mmax=max(mmax,dp[i]);
update(1,i,i,0,N,dp[i]);
}
cout<<mmax<<endl;
return 0;
}
如果把N改成400000,就过不了了
求调,悬一关
回复
共 22 条回复,欢迎继续交流。
正在加载回复...