3 solutions

  • 2
    @ 2025-8-6 18:08:23
    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    struct e{
        int p;
        int t;
        int d;
    };
    struct s{
        int l;
        int r;
        int d;
    };
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n,m;
        cin>>n>>m;
        vector<int> c(m);
        for(int i=0;i<m;i++){
            cin>>c[i];
        }
        vector<vector<s>> g(m);
        for(int i=0;i<n;i++){
            int L,R,K;
            cin>>L>>R>>K;
            vector<int> x(K);
            for(int j=0;j<K;j++){
                cin>>x[j];
                x[j]--;
            }
            for(int y:x){
                g[y].push_back({L,R,i});
            }
        }
        int T=0;
        vector<int> r(n,0);
        for(int x=0;x<m;x++){
            if(g[x].empty())continue;
            vector<e> a;
            for(auto &t:g[x]){
                a.push_back({t.l,1,t.d});
                a.push_back({t.r+1,-1,t.d});
            }
            sort(a.begin(),a.end(),[](const e&i,const e&j){
                if(i.p!=j.p)return i.p<j.p;
                return i.t<j.t;
            });
            set<int> b;
            unordered_map<int,int> f;
            int U=0;
            int l=a[0].p;
            int j=0;
            while(j<a.size()){
                int p=a[j].p;
                if(l<p){
                    int seg=p-l;
                    if(!b.empty()){
                        U+=seg;
                        if(b.size()==1){
                            int d=*b.begin();
                            f[d]+=seg;
                        }
                    }
                }
                int k=j;
                while(k<a.size()&&a[k].p==p){
                    if(a[k].t==-1)b.erase(a[k].d);
                    else b.insert(a[k].d);
                    k++;
                }
                l=p;
                j=k;
            }
            T+=c[x]*U;
            for(auto &p:f){
                r[p.first]+=c[x]*p.second;
            }
        }
        for(int i=0;i<n;i++){
            cout<<T-r[i]<<' ';
        }
        return 0;
    }
    
    • @ 2025-8-6 20:07:08

      说的太差了

Information

ID
177
Time
3000ms
Memory
512MiB
Difficulty
10
Tags
(None)
# Submissions
139
Accepted
2
Uploaded By