QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#683143#9529. Farm Managementwt_vicWA 26ms8776kbC++147.9kb2024-10-27 19:02:032024-10-27 19:02:03

Judging History

你现在查看的是最新测评结果

  • [2024-10-27 19:02:03]
  • 评测
  • 测评结果:WA
  • 用时:26ms
  • 内存:8776kb
  • [2024-10-27 19:02:03]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
struct Node
{
    int l,r;
    int x,len;
}tr[N << 2];
int a[N],b[N];
vector<int>p,d;
void pushup(int u) {
    if(tr[u << 1].x == tr[u << 1].len)
    tr[u].x = tr[u << 1].x + tr[u << 1 | 1].x;
    else tr[u].x = tr[u << 1].x;
}
void build(int u,int l,int r) {
    tr[u] = {l,r,0,r - l + 1};
    if(l == r) {
        if(a[l] == 0)tr[u].x = 1;
        else tr[u].x = 0;
        return;
    }
    int mid = l + r >> 1;
    build(u << 1,l,mid);
    build(u << 1 | 1,mid + 1,r);
    pushup(u);
}
void modify(int u,int x,int c) {
    if(tr[u].l == tr[u].r) {
        if(c == 0)tr[u].x = 1;
        else tr[u].x = 0;
        return;
    }
    int mid = tr[u].l + tr[u].r >> 1;
    if(x <= mid)modify(u << 1,x,c);
    else modify(u << 1 | 1,x,c);
    pushup(u);
}
int query(int u,int l,int r) {
    if(tr[u].l >= l and tr[u].r <= r) {
        if(tr[u].x == tr[u].len)return -1;
        else return tr[u].x + tr[u].l;
    }
    int mid = tr[u].l + tr[u].r >> 1;
    int x = query(u << 1,l,r);
    if(x == -1) {
        return query(u << 1 | 1,l,r);
    }else return x;
}
void solveJ() {
    int n,m;
    for(int i = 1;i <= n;i ++ ) {
        cin >> a[i];b[i] = a[i];
    }
    int pre = 0;
    p.push_back(0);
    d.push_back(0);
    vector<int>st(n + 1);
    for(int i = 1;i <= m;i ++ ) {
        int x,t;
        cin >> x >> t;
        int dis = x - pre;
        pre = x;
        p.push_back(t);
        st[t] ++;
        d.push_back(dis);
    }
    build(1,1,m);
    ll sum = 0;
    for(int i = 1;i <= n;i ++ ) {
        if(!st[i])sum += a[i];
    }
    int k = 0;
    ll ans = 0;
    bool f = 0;
    for(int i = 1;i <= m;i ++ ) {
        int dis = d[i];
        while(dis > 0) {
            int pos = query(1,i,m);
            if(pos == -1) {
                if(sum >= dis) {
                    ans += dis;
                    sum -= dis;
                    dis = 0;
                }else {
                    ans += sum;
                    dis -= sum;
                    sum = 0;
                    f = 1;break;
                }
            }else {
                if(dis >= a[p[pos]]) {
                    ans += a[p[pos]];
                    dis -= a[p[pos]];
                    modify(1,pos,0);
                    a[p[pos]] = 0;
                }else {
                    ans += dis;
                    a[p[pos]] -= dis;
                    dis = 0;
                }
            }
        }
        if(f == 1)break;
        modify(1,i,1);
        a[p[i]] = b[p[i]];
        ;
        if(!--st[p[i]]) sum += a[p[i]];
    }
    ans += sum;
    cout << ans << "\n";
}
typedef pair<int,int> pii;
vector<pii>G[101];
int link[101];
void solve() {
    int l,r;
    cin >> l >> r;
    memset(link,-1,sizeof link);
    int node = 2,tar = 2;//起点为1 终点为2
    int mx = -1;
    function<void(int,int,int)> dfs = [&](int l,int r,int k) -> void{
        /*
            100011 0 10100 -> 10100 ~ 11111
            100011 1 11110 -> 00000 ~ 11110
            1 0 100 -> 100 ~ 111
            1 1 111 -> 000 ~ 111
            ~~~~~~~~~~~~~~~~~~~~
            0 0001 -> 0001 ~ 1111 
            1 1110 -> 0000 ~ 1110

            0 001 -> 001 ~ 111 
            1 111 -> 000 ~ 111 X

            0 01 -> 01 ~ 11
            1 11 -> 00 ~ 11 X

            0 1 -> 1 ~ 1 X
            1 1 -> 0 ~ 1 X

            0 000 -> 000 ~ 111 X
            1 110 -> 000 ~ 110 

            0 00 -> 00 ~ 11 X
            1 10 -> 00 ~ 10

            0 0  -> 0 1 X
            1 0  -> 0 0 X
        */
        int now = k;
        int x = -1;
        int t = 19;
        if(l == r and (l == 0 || l == 1)) {
            G[now].push_back({tar,l});
            return;
        }
        while(!(r >> t & 1))t --;
        if(l == r) {
            for(int i = t;i;i -- ) {
                G[now].push_back({++ node,(r >> i & 1)});
                now = node;
            }
            G[now].push_back({tar,r & 1});
            return;
        }
        for(int i = t;i >= 0;i -- ) {
            if((r >> i & 1) != (l >> i & 1))  {
                x = i;
                break;
            }else {
                G[now].push_back({++ node,(r >> i & 1)});
                now = node;
            }
        }
        if(l == 0 and r == (1 << x + 1) - 1) {
            // link 到 i -> i + 1 {0,1}的链
            link[now] = x;
            mx = max(mx,x);
            return;
        }
        int s = l >> x << x;
        if(x == 0) {
            G[now].push_back({tar,1});
            G[now].push_back({tar,0});
            return;
        }
        // cout << l - s << ' ' << (1 << x) - 1 << endl;
        // cout << 0 << ' ' << r - s - (1 << x) << endl;
        G[now].push_back({node + 1,0});
        G[now].push_back({node + 2,1});
        int d = node;
        node += 2;

        dfs(l - s,(1 << x) - 1,d + 1);

        int j = (__lg(r - s - (1 << x)));
        now = d + 2;
        while(x != j + 1) {
            G[now].push_back({++ node,0});
            now = node;
            j ++;
        }
        //if(d == 7)cout << d + 2 << now << "\n";
        dfs(0,r - s - (1 << x),now);
    };
    int f1 = -1,f2 = -1;
    for(int i = 0;i < 20;i ++ ) {
        if(l >> i & 1)f1 = i;
        if(r >> i & 1)f2 = i;
    }
    int L = l;
    for(int i = f1 + 1;;i ++ ) {
        int R = (1 << i) - 1;
        R = min(R,r);
        dfs(L,R,1);
        if(R >= r) {
            break;
        }
        L = R + 1;
    }

    if(mx != -1) {
        G[node + 1].push_back({tar,1});
        G[node + 1].push_back({tar,0});
        for(int i = 2;i <= mx;i ++ ) {
            G[node + i].push_back({node + i - 1,1});
            G[node + i].push_back({node + i - 1,0});
        }

        for(int i = 1;i <= node;i ++ ) {
            int x = link[i];
            if(x == -1)continue;
            // cout << i << ' ' << x << '\n';
            if(x == 0) {
                G[i].push_back({tar,1});
                G[i].push_back({tar,0});
            }
            else {
                G[i].push_back({node + x,1});
                G[i].push_back({node + x,0});
            }
        }
    }
    /*cout << node + mx << "\n";
    for(int i = 1;i <= node + mx;i ++ ) {
        cout << G[i].size() << " ";
        for(auto [v,w] : G[i]) {
            cout << v << ' ' << w << ' ';
        }
        cout << "\n";
    }*/
    for(int i = 1;i <= node + mx;i ++ ) {
        for(auto [v,w] : G[i]) {
            cout << i << ' ' << v << ' ' << w << '\n';
        }
    }
    
}
void solveK() {
    ll n,m;
    cin >> n >> m;
    vector<ll>w(n),l(n),r(n),p(n);
    ll s = 0;
    for(int i = 0;i < n;i ++ ) {
        cin >> w[i] >> l[i] >> r[i];
        s += l[i];
    }
    iota(p.begin(),p.end(),0);
    sort(p.begin(),p.end(),[&](int a,int b) {
        return w[a] > w[b];
    });
    
    vector<ll>rs(n + 1),ls(n + 1),d(n + 1);
    for(int i = 0;i < n;i ++ ) {
        int id = p[i];
        ls[i + 1] = ls[i] + w[id] * l[id];
        rs[i + 1] = rs[i] + w[id] * r[id];
        d[i + 1] = d[i] + (r[id] - l[id]);
    }
    ll t = m - s,ans = 0;
    for(int i = 1;i <= n;i ++ ) {
        int id = p[i - 1];
        t += l[id];
        int pos = upper_bound(d.begin() + 1,d.end(),t) - d.begin() - 1;
        ll res = 0;
        if(pos < i) {
            int det = t - d[pos];// pos + 1 <= i - 1
            res = rs[pos] + w[p[pos]] * det + (ls[n] - ls[i]) + (pos + 1 <= i - 1 ? (ls[i - 1] - ls[pos]) : 0);
        }else {
            int det = t - d[i - 1];
            res = rs[i - 1] + w[id] * det + (ls[n] - ls[i]);
        }
        ans = max(ans,res); 
        t -= l[id];
    }
    cout << ans << "\n";
}
int main() {

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int T = 1;
    //cin >> T;
    while(T -- ) {
        solveK();
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3632kb

input:

5 17
2 3 4
6 1 5
8 2 4
4 3 3
7 5 5

output:

109

result:

ok single line: '109'

Test #2:

score: 0
Accepted
time: 0ms
memory: 3524kb

input:

12 62
503792 9 10
607358 1 3
600501 10 10
33249 4 4
774438 6 6
197692 3 6
495807 8 8
790225 5 9
77272 3 8
494819 4 9
894779 3 9
306279 5 6

output:

35204500

result:

ok single line: '35204500'

Test #3:

score: 0
Accepted
time: 0ms
memory: 3592kb

input:

15 32
835418 2 3
178262 1 3
527643 2 2
519710 1 1
774544 3 3
82312 1 1
808199 1 1
809396 1 3
255882 1 3
80467 1 3
874973 1 3
813965 1 2
198275 1 2
152356 1 3
802055 1 1

output:

22000255

result:

ok single line: '22000255'

Test #4:

score: 0
Accepted
time: 0ms
memory: 3632kb

input:

13 20
526447 1 1
807398 2 2
4167 1 2
944031 2 2
830685 2 2
394251 1 2
505011 1 2
968848 1 1
58170 1 3
32504 1 1
792273 3 3
196120 1 2
714507 1 1

output:

12878768

result:

ok single line: '12878768'

Test #5:

score: 0
Accepted
time: 0ms
memory: 3524kb

input:

13 32
582584 1 3
335440 3 3
971984 1 2
864169 1 2
528515 1 1
382399 1 2
459855 1 2
406909 2 3
66780 2 3
885118 3 3
434844 1 2
93331 1 3
502509 1 3

output:

22065034

result:

ok single line: '22065034'

Test #6:

score: 0
Accepted
time: 0ms
memory: 3760kb

input:

12 77
30244 1 7
518214 3 8
486001 8 9
152634 2 3
180255 3 4
791887 1 6
635820 2 9
881171 3 5
337905 3 8
683182 5 5
300786 3 6
339094 7 9

output:

50453764

result:

ok single line: '50453764'

Test #7:

score: 0
Accepted
time: 0ms
memory: 3524kb

input:

10 3923726
826284 215861 638800
471693 146746 886003
140800 532315 684546
673434 604071 814259
170671 299465 525449
104262 689547 855391
215333 591975 803421
795321 31606 984783
103838 361911 601318
145693 450227 686945

output:

1597735409747

result:

ok single line: '1597735409747'

Test #8:

score: 0
Accepted
time: 23ms
memory: 8584kb

input:

100000 16648414311
252800 55607 195981
157144 548469 789695
643048 2 2
907957 3 3
32532 231618 316365
194428 227513 762023
4231 393553 699179
898052 3 5
507551 3 5
747498 1 4
857939 9 9
440056 764429 796585
495571 117772 838593
4059 551203 870687
60877 597981 770178
593237 4 10
438147 218335 370780
...

output:

4148641232436282

result:

ok single line: '4148641232436282'

Test #9:

score: 0
Accepted
time: 26ms
memory: 8776kb

input:

100000 14997174848
996832 2 5
193379 411081 976749
339827 553492 639067
127364 131886 237768
615192 3 9
417612 599185 637969
812326 2 5
22605 80976 90557
350917 119223 755129
807528 7 8
165108 327186 793786
126946 530792 700713
246467 387234 557026
286888 485816 869662
398882 73798 458939
651741 3 9...

output:

3763949202789374

result:

ok single line: '3763949202789374'

Test #10:

score: 0
Accepted
time: 22ms
memory: 8600kb

input:

99999 49959949282
541788 999954 999965
269794 8 9
446939 999985 999990
994146 7 13
976318 999916 999995
372141 999918 999934
398999 999949 999983
736560 4 7
753380 999933 999979
664693 12 14
336068 999904 999914
337406 11 11
153015 2 3
989608 1 15
61489 999921 999977
438155 999928 999955
374725 6 14...

output:

24950941271114177

result:

ok single line: '24950941271114177'

Test #11:

score: 0
Accepted
time: 25ms
memory: 8628kb

input:

100000 50094841499
989502 999933 999995
613471 999942 999989
987086 999912 999912
170196 8 8
992426 7 8
935974 999985 999993
509210 7 8
136227 999901 999966
975351 3 8
979031 4 6
160909 999918 999956
919448 6 6
166331 3 10
412011 1 2
815782 999967 999985
272771 1 9
414870 6 10
991275 6 8
568088 9999...

output:

25091133401633321

result:

ok single line: '25091133401633321'

Test #12:

score: 0
Accepted
time: 0ms
memory: 3536kb

input:

1 1
1000000 1 1

output:

1000000

result:

ok single line: '1000000'

Test #13:

score: 0
Accepted
time: 15ms
memory: 8580kb

input:

99999 99999
2 1 1
2 1 1
4 1 1
9 1 1
1 1 1
2 1 1
4 1 1
8 1 1
7 1 1
5 1 1
6 1 1
8 1 1
10 1 1
5 1 1
7 1 1
3 1 1
4 1 1
7 1 1
8 1 1
7 1 1
7 1 1
6 1 1
8 1 1
1 1 1
5 1 1
1 1 1
8 1 1
5 1 1
9 1 1
3 1 1
10 1 1
8 1 1
4 1 1
3 1 1
9 1 1
2 1 1
1 1 1
10 1 1
5 1 1
3 1 1
3 1 1
5 1 1
4 1 1
7 1 1
6 1 1
3 1 1
7 1 1
2 1...

output:

549692

result:

ok single line: '549692'

Test #14:

score: 0
Accepted
time: 17ms
memory: 8628kb

input:

100000 100000000000
9 1000000 1000000
9 1000000 1000000
3 1000000 1000000
8 1000000 1000000
7 1000000 1000000
7 1000000 1000000
8 1000000 1000000
10 1000000 1000000
9 1000000 1000000
3 1000000 1000000
5 1000000 1000000
3 1000000 1000000
6 1000000 1000000
5 1000000 1000000
8 1000000 1000000
8 1000000...

output:

549817000000

result:

ok single line: '549817000000'

Test #15:

score: 0
Accepted
time: 8ms
memory: 8580kb

input:

100000 671789
5 2 10
9 5 7
8 2 9
5 8 10
8 2 9
1 1 4
2 4 4
2 4 10
1 7 8
6 2 5
6 2 9
8 2 8
7 4 9
7 2 7
6 9 10
2 8 10
5 2 5
10 7 7
8 10 10
1 2 10
9 5 8
1 2 10
7 7 10
2 1 8
8 3 5
9 2 6
9 6 7
1 2 6
1 5 9
4 3 9
9 3 9
6 4 5
10 7 10
9 2 6
4 1 1
5 7 10
9 3 8
10 3 7
2 3 7
5 3 8
9 6 10
10 3 7
8 3 10
8 7 8
9 2 ...

output:

4980663

result:

ok single line: '4980663'

Test #16:

score: -100
Wrong Answer
time: 19ms
memory: 8568kb

input:

100000 43584087032
3 308557 419587
10 44993 179507
3 558835 576023
4 479689 820340
7 4935 112717
5 322154 540751
9 153422 454200
3 487079 842717
9 21773 328114
9 690130 713456
4 518679 947666
7 301275 983364
3 911034 987000
2 15489 33232
5 324080 855780
10 274011 978357
7 436627 535933
6 255072 3389...

output:

275545789202

result:

wrong answer 1st lines differ - expected: '285837954666', found: '275545789202'