3 solutions
-
0
Guest MOD
-
-1
#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; }
Information
- ID
- 177
- Time
- 3000ms
- Memory
- 512MiB
- Difficulty
- 10
- Tags
- (None)
- # Submissions
- 139
- Accepted
- 2
- Uploaded By