这样为什么不对
  • 板块P3800 Power收集
  • 楼主Zipao
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/21 15:59
  • 上次更新2023/11/2 18:53:11
查看原帖
这样为什么不对
902073
Zipao楼主2023/9/21 15:59
//完全有可能不是每一行都p点,所以用ve收集了所有p点的行再排序去重
//初始化存在p点的最小行,pre记录最近更新的行其实就是一般的i-1行和i行的关系
//为什么不行?
//除了有关这一个改变,其余代码保证正确(改为从1-n行dp已AC)
#include<bits/stdc++.h>
#define il inline
#define get getchar
#define put putchar
#define is isdigit
#define re register
#define int long long
#define dfor(i,a,b) for(re int i=a;i<=b;++i)
#define dforr(i,a,b) for(re int i=a;i>=b;--i)
#define dforn(i,a,b) for(re int i=a;i<=b;++i,put(10))
#define mem(a,b) memset(a,b,sizeof a)
#define memc(a,b) memcpy(a,b,sizeof a)
#define pr 114514191981
#define gg(a) cout<<a,put(32)
#define INF 0x7fffffff
#define tt(x) cout<<x<<'\n'
#define ls i<<1
#define rs i<<1|1
#define lowbit(x) (x&-x)
using namespace std;
typedef unsigned int ull;
const int N=1e5+10,M=2e3+10,mod=19650827;
int read(void)
{
    re int x=0,f=1;re char c=get();
    while(!is(c)) (f=c==45?-1:1),c=get();
    while(is(c)) x=(x<<1)+(x<<3)+(c^48),c=get();
    return x*f;
}
void write(int x)
{
    if(x<0) x=-x,put(45);
    if(x>9) write(x/10);
    put((x%10)^48);
}
#define writeln(a) write(a),put(10)
#define writesp(a) write(a),put(32)
int n,m,k,t,ans,f[4001][4001];
vector<int > ve;
signed main()
{
    n=read(),m=read(),k=read(),t=read();
    re int x,y,pre;
    while(k--) x=read(),y=read(),f[x][y]=read(),ve.push_back(x);
    sort(ve.begin(),ve.end());
    ve.erase(unique(ve.begin(),ve.end()),ve.end());
    pre=ve[0];
    dfor(i,1,ve.size()-1)
    {
        deque<int > q;
        re int pos=0;
        dfor(j,1,m)
        {
            while(!q.empty()&&j-t>q.front()) q.pop_front();
            while(pos+1<=m&&pos+1<=j+t)
            {
                ++pos;
                if(!f[pre][pos]) continue;
                while(!q.empty()&&f[pre][q.back()]<=f[pre][pos]) q.pop_back();
                q.push_back(pos);
            }
            if(!q.empty()) ans=max(ans,f[ve[i]][j]+=f[pre][q.front()]);
        }
        pre=ve[i];
    }
    write(ans);
    return 0;
}
2023/9/21 15:59
加载中...