社区讨论

为什么这个暴力过不了第三个点

P14638[NOIP2025] 序列询问参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mj77cvkl
此快照首次捕获于
2025/12/15 21:41
3 个月前
此快照最后确认于
2025/12/18 23:25
3 个月前
查看原帖
RT,我场上2000那个大样例跑了1s左右
CPP
#include<bits/stdc++.h>
using namespace std;
int a[3009];
long long pre[3009];
long long mem[3009][3009];

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    for(int i = 1;i <= n;i++){
        cin >> a[i];
        pre[i] = pre[i - 1] + a[i];
    }

    int q;
    cin >> q;
    while(q--){
        int l,r;
        cin >> l >> r;
        unsigned long long ans = 0;
        for(int i = 1;i <= n;i++){
            unsigned long long an= 0;
            long long maxx = -0x3f3f3f3f3f3f3f3f;
            for(int len = l;len <= r;len++){
                long long maxxx = -0x3f3f3f3f3f3f3f3f;
                if(mem[i][len] != 0){
                    maxxx = mem[i][len]; 
                    goto zxt;
                }
                for(int be = max(1,i - len + 1);be <= i && be + len - 1 <= n;be++){
                    maxxx = max(maxxx,pre[be + len - 1] - pre[be - 1]);
//                    cerr << i << ' ' << be + len - 1 << " " << be << ' ' << pre[be + len - 1] - pre[be - 1] << endl;
                }
                zxt:
                mem[i][len] = maxxx;
                maxx = max(maxx,maxxx);
            }
//            cerr << maxx << endl;
            maxx *= i;
            an += maxx;
            ans ^= an;
        }
        cout << ans << '\n';
    }
}

回复

0 条回复,欢迎继续交流。

正在加载回复...