记录编号 |
588861 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
雨和卡布奇诺 |
最终得分 |
100 |
用户昵称 |
flyfree |
是否通过 |
通过 |
代码语言 |
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;
}