记录编号 588861 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 雨和卡布奇诺 最终得分 100
用户昵称 Gravatarflyfree 是否通过 通过
代码语言 C++ 运行时间 2.356 s
提交时间 2024-07-01 17:51:10 内存使用 66.77 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define MAXN 500005
long long  n,m,idx,ans;
long long t[MAXN],u[MAXN],sum[MAXN];
long long l[MAXN],k[MAXN],cnt[MAXN];
long long tag[MAXN];
struct node{
    long long  num,val;
};
bool cmp(node a,node b){
    return a.val<b.val;
}
vector <node> s[MAXN];
vector <long long > c[MAXN],d[MAXN];
std::map<long long,long long > mapz;
queue <long long > q;
int  main(){
    freopen("Cappuccino.in","r",stdin);
    freopen("Cappuccino.out","w",stdout);
    cin>>n;
    for(long long  i=1;i<=n;i++){
        cin>>t[i]>>u[i];
        sum[++idx]=u[i];
        mapz.insert(std::make_pair(t[i],idx));
    }
    cin>>m;
    for(long long  i=1;i<=m;i++){
        cin>>l[i];
        long long  a,b;
        for(long long  j=1;j<=l[i];j++){
            cin>>a>>b;
            if(!mapz[a]){
            mapz[a]=++idx;
//                         cout<<a<<" "<<idx<<" "<<mapz[a]<<endl;
            }
            if(sum[mapz[a]]>=b)cnt[i]++;
            else{
                s[mapz[a]].push_back((node){i,b});
            }
        }
        if(cnt[i]==l[i])q.push(i);
        cin>>k[i];
        for(long long  j=1;j<=k[i];j++){
            cin>>a>>b;
            if(!mapz[a])mapz[a]=++idx;
            d[i].push_back(b);
            c[i].push_back(mapz[a]);
//            cout<<mapz[a]<<endl;
        }
    }
    for(long long  i=1;i<=idx;i++)sort(s[i].begin(),s[i].end(),cmp);
    while(!q.empty()){
//        cout<<fst<<endl;
        long long  fst=q.front();
//        cout<<fst<<endl;
        ans++;
        q.pop();
        for(long long  i=0;i<k[fst];i++){
            long long  y=c[fst][i];
            sum[y]+=d[fst][i];
//            cout<<y<<" "<<d[fst][i]<<endl;
            while(tag[y]<s[y].size()){
                if(sum[y]>=s[y][tag[y]].val){
                    cnt[s[y][tag[y]].num]++;
                    if(cnt[s[y][tag[y]].num]>=l[s[y][tag[y]].num])q.push(s[y][tag[y]].num);
                    tag[y]++;
                }else break;
            }
        }
    }
    cout<<ans;
    return 0;
}