Submission #75560549


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define int ll
#pragma GCC optimize("O3")

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

mt19937_64 rng(std::chrono::system_clock::now().time_since_epoch().count());

const int B = 3;
const int SQ = 500;

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int t;
    cin >> t;
    while(t--){
        int n,q;
        cin >> n >> q;
        vi dp(2*n+1,-(int)1e18);
        dp[0] = 0;
        int sum = 0;
        vector<vi>arr(n+1,vi(3));
        for(int i = 1; i<=n; i++){
            int x,y,z;
            cin >> x >> y >> z;
            arr[i] = {x,y,z};
        }
        auto merge = [&](vi a, vi b) -> vi {
            int l = 0; int r = 0;
            vi c;
            while(l < sz(a) && r < sz(b)){
                c.push_back({a[l] + b[r]});
                if(l + 1 < sz(a)){
                    l++;
                }
                else if(r + 1 < sz(b)){
                    r++;
                }
                else{
                    break;
                }
                int bl = l; int br = r;
                int val = a[bl] + b[br];
                for(int d = -B; d<=B; d++){
                    int nl = l + d; int nr = r - d;
                    if(nl >= 0 && nl < sz(a) && nr >= 0 && nr < sz(b) && a[nl] + b[nr] > val){
                        val = a[nl] + b[nr];
                        bl = nl; br = nr;
                    }
                }
                l = bl; r = br;
            }
            return c;
        };
        auto solve = [&](auto &&self, int l, int r) -> vi {
            if(r - l == 1){
                return arr[l];
            }
            int m = (l+r)/2;
            vi left = self(self,l,m);
            vi right = self(self,m,r);
            return merge(left,right);
        };
        vi big = {0};
        vi cur = {0};
        vector<vector<pii>>buckets(n+1);
        for(int i = 1; i<=q; i++){
            int d,b;
            cin >> d >> b;
            buckets[d].push_back({b,i});
        }
        vi ans(q+1);
        for(int i = 1; i<=n; i++){
            cur = merge(cur,arr[i]);
            if(sz(cur) >= SQ){
                big = merge(big,cur);
                cur = {0};
            }
            for(auto [b,id] : buckets[i]){
                for(int j = 0; j<sz(cur); j++){
                    int k = b - j;
                    if(k >= 0 && k < sz(big)){
                        ans[id] = max(ans[id],cur[j] + big[k]);
                    }
                }
            }
        }
        for(int i = 1; i<=q; i++){
            cout << ans[i] << '\n';
        }
    }
    return 0;
}

Submission Info

Submission Time
Task O - Game
User kevinyang
Language C++23 (GCC 15.2.0)
Score 7
Code Size 2865 Byte
Status AC
Exec Time 2838 ms
Memory 45488 KiB

Compile Error

./Main.cpp: In function 'int main()':
./Main.cpp:27:13: warning: unused variable 'sum' [-Wunused-variable]
   27 |         int sum = 0;
      |             ^~~
./Main.cpp:61:14: warning: variable 'solve' set but not used [-Wunused-but-set-variable]
   61 |         auto solve = [&](auto &&self, int l, int r) -> vi {
      |              ^~~~~

Judge Result

Set Name Sample Subtask All
Score / Max Score 0 / 0 5 / 5 2 / 2
Status
AC × 2
AC × 8
AC × 23
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
Subtask 00_sample_01.txt, 01_subtask_00.txt, 01_subtask_01.txt, 01_subtask_02.txt, 01_subtask_03.txt, 01_subtask_04.txt, 01_subtask_05.txt, 01_subtask_06.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_subtask_00.txt, 01_subtask_01.txt, 01_subtask_02.txt, 01_subtask_03.txt, 01_subtask_04.txt, 01_subtask_05.txt, 01_subtask_06.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt, 02_random_12.txt, 02_random_13.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3484 KiB
00_sample_01.txt AC 1 ms 3484 KiB
01_subtask_00.txt AC 5 ms 3544 KiB
01_subtask_01.txt AC 5 ms 3448 KiB
01_subtask_02.txt AC 6 ms 3556 KiB
01_subtask_03.txt AC 13 ms 3596 KiB
01_subtask_04.txt AC 2809 ms 45312 KiB
01_subtask_05.txt AC 2817 ms 45356 KiB
01_subtask_06.txt AC 2826 ms 45328 KiB
02_random_00.txt AC 5 ms 3484 KiB
02_random_01.txt AC 6 ms 3748 KiB
02_random_02.txt AC 7 ms 3692 KiB
02_random_03.txt AC 8 ms 3672 KiB
02_random_04.txt AC 10 ms 3576 KiB
02_random_05.txt AC 12 ms 3740 KiB
02_random_06.txt AC 13 ms 3564 KiB
02_random_07.txt AC 2833 ms 45360 KiB
02_random_08.txt AC 2824 ms 45448 KiB
02_random_09.txt AC 2838 ms 45444 KiB
02_random_10.txt AC 2815 ms 45464 KiB
02_random_11.txt AC 2833 ms 45344 KiB
02_random_12.txt AC 2823 ms 45488 KiB
02_random_13.txt AC 1 ms 3564 KiB