Billionaires

Billionaires

Time limit: 3.0 second
Memory limit: 64 MB

You probably are aware that Moscow holds the first place in the world with respect to the number of billionaires living there. However, the work of billionaires is such that they have to travel a lot. That is why some other city can be the first in such a list on certain days. Your friends from FSB, FBI, MI5, and Shin Bet have provided you with information about movements of billionaires during some period of time. Your employer asks you to determine for each city the number of days during this period on which this city exceeded all other cities in the total amount of money that billionaires staying in this city have.

Input

In the first line you are given the number n of billionaires (1 ≤ n ≤ 10000). The following nlines contain information about these people: their names, cities where they were staying at the beginning of the period, and their fortunes. In the next line you are given the number m of days in the period for which you have the information (1 ≤ m ≤ 50000) and the number k of travels of the billionaires (0 ≤ k ≤ 50000). The following k lines contain the list of travels in the following format: the number of the day (from 1 to m−1), the name of the person, and the city of destination. You may assume that billionaires depart late at night and arrive to the destination city on the next day‘s morning. They cannot make more than one travel each day. The numbers of days in the list are not decreasing. All names of people and cities consist of at most 20 English letters; you must take into consideration the case of the symbols. The fortunes are in the range from 1 to 100 billions (one billion is a thousand million).

Output

In each line of the output give the name of a city and, after a space, the number of days during which this city was the first with respect to the sum of fortunes of the billionaires staying there. Leave out those cities for which there were no such days. The cities must be sorted alphabetically (with the usual symbol order: ABC...Zabc...z).

Sample

input output
5
Abramovich London 15000000000
Deripaska Moscow 10000000000
Potanin Moscow 5000000000
Berezovsky London 2500000000
Khodorkovsky Chita 1000000000
25 9
1 Abramovich Anadyr
5 Potanin Courchevel
10 Abramovich Moscow
11 Abramovich London
11 Deripaska StPetersburg
15 Potanin Norilsk
20 Berezovsky Tbilisi
21 Potanin StPetersburg
22 Berezovsky London
Anadyr 5
London 14
Moscow 1

分析:线段树单点更新查询最大值坐标;

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
#define pii pair<int,int>
#define Lson L, mid, rt<<1
#define Rson mid+1, R, rt<<1|1
const int maxn=1e5+10;
using namespace std;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
int n,m,k,t,d,now[maxn],num,cnt;
map<string,int>ci;
map<string,int>id;
map<int,string>to;
ll mo[maxn];
struct node
{
    string x,y;
}a[maxn];
struct node1
{
    int t;
    string x,y;
}q[maxn];
struct node2
{
    int id,t;
    bool operator<(const node2&p)const
    {
        return to[id]<to[p.id];
    }
}ans[maxn];
struct Node
{
    ll Max, lazy;
} T[maxn<<2];

void PushUp(int rt)
{
    T[rt].Max = max(T[rt<<1].Max, T[rt<<1|1].Max);
}

void PushDown(int L, int R, int rt)
{
    int mid = (L + R) >> 1;
    ll t = T[rt].lazy;
    T[rt<<1].Max += t;
    T[rt<<1|1].Max += t;
    T[rt<<1].lazy += t;
    T[rt<<1|1].lazy += t;
    T[rt].lazy = 0;
}

void Update(int l, int r, ll v, int L, int R, int rt)
{
    if(l==L && r==R)
    {
        T[rt].lazy += v;
        T[rt].Max += v;
        return ;
    }
    int mid = (L + R) >> 1;
    if(T[rt].lazy) PushDown(L, R, rt);
    if(r <= mid) Update(l, r, v, Lson);
    else if(l > mid) Update(l, r, v, Rson);
    else
    {
        Update(l, mid, v, Lson);
        Update(mid+1, r, v, Rson);
    }
    PushUp(rt);
}

int Query(int L, int R, int rt)
{
    if(L==R)return L;
    if(T[rt].lazy)PushDown(L,R,rt);
    int mid=L+R>>1;
    if(T[rt<<1].Max>T[rt<<1|1].Max)return Query(Lson);
    else if(T[rt<<1].Max<T[rt<<1|1].Max)return Query(Rson);
    else return 0;
}
int main()
{
    int i,j;
    scanf("%d",&n);
    rep(i,1,n)
    {
        cin>>a[i].x>>a[i].y>>mo[i];
        id[a[i].x]=i;
        if(!ci[a[i].y])ci[a[i].y]=++num,to[num]=a[i].y;
        now[i]=ci[a[i].y];
    }
    scanf("%d%d",&d,&m);
    rep(i,1,m)
    {
        cin>>q[i].t>>q[i].x>>q[i].y;
        if(!ci[q[i].y])ci[q[i].y]=++num,to[num]=q[i].y;
    }
    rep(i,1,num)ans[i].id=i;
    rep(i,1,n)Update(ci[a[i].y],ci[a[i].y],mo[i],1,num,1);
    j=1;
    rep(i,1,d)
    {
        while(j<=m&&q[j].t==i-1)
        {
            Update(now[id[q[j].x]],now[id[q[j].x]],-mo[id[q[j].x]],1,num,1);
            Update(ci[q[j].y],ci[q[j].y],mo[id[q[j].x]],1,num,1);
            now[id[q[j].x]]=ci[q[j].y];
            j++;
        }
        if((cnt=Query(1,num,1)))ans[cnt].t++;
    }
    sort(ans+1,ans+num+1);
    rep(i,1,num)if(ans[i].t)printf("%s %d\n",to[ans[i].id].c_str(),ans[i].t);
    //system("Pause");
    return 0;
}
时间: 2024-11-10 13:23:19

Billionaires的相关文章

富家论坛,资讯

:http://bbs.pinggu.org/forum-103-1.html http://tieba.baidu.com/f?kw=%B8%BB%BA%C0 http://bbs.icxo.com/forum-1952-1.html msn: http://money.msn.com.cn/rich/ http://www.forbeschina.com/billionaires/ http://finance.people.com.cn/ http://finance.jrj.com.cn

HDU 3405

World Islands Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1493    Accepted Submission(s): 594 Problem Description Dubai is a haven for the rich. The government of Dubai finds a good way to m

HDU - 3405 - World Islands

先上题目: World Islands Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 888    Accepted Submission(s): 345 Problem Description Dubai is a haven for the rich. The government of Dubai finds a good way

PAT1055. The World&#39;s Richest

Forbes magazine publishes every year its list of billionaires based on the annual ranking of the world's wealthiest people. Now you are supposed to simulate this job, but concentrate only on the people in a certain range of ages. That is, given the n

阿里上市造富运动,致全球富豪榜震荡,马化腾缩水最多,孙正义快要登顶

钛媒体注:福布斯"The World's Billionaires"(全球亿万富翁),在上周(2014年9月8日-2014年9月12日)全球富豪排行榜中,世界富豪榜.中国富豪榜的前三位排名均未出现变动,世界前三位仍是卡洛斯.比尔·盖茨.巴菲特,中国前三位为王健林.李彦宏.马化腾.上周由于阿里巴巴上市消息的传出,各大富豪的身价似乎涨跌幅度有点大了,其中缩水最严重的是马化腾. 据福布斯数据显示,上周,马化腾的个人资产净值在周一下跌2.82亿美元后,于周三(10日).周四(11日)再次出现下

1055. The World&#39;s Richest

Forbes magazine publishes every year its list of billionaires based on the annual ranking of the world's wealthiest people. Now you are supposed to simulate this job, but concentrate only on the people in a certain range of ages. That is, given the n

pat1055. The World&#39;s Richest (25)

1055. The World's Richest (25) 时间限制 400 ms 内存限制 128000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Forbes magazine publishes every year its list of billionaires based on the annual ranking of the world's wealthiest people. Now you are supposed to si

利用Tensorflow进行自然语言处理(NLP)系列之一Word2Vec

写在前面的话(可略过): 一直想写下.整理下利用Tensorflow或Keras工具进行自然语言处理(NLP)方面的文章,对比和纠结了一段时间,发现博众家之长不如静下心来一步一个脚印地去看一本书来得更实在,虽然慢但是心里相对踏实些.近期刚把Thushan Ganegedara写的<Natural Language Processing with TensorFlow>(2018年5月第一次出版),目前没看到中文版.讲真,看原版书确实很耗费精力,但原版书的好处是可以原汁原味地探索.写博文的过程中

1055 The World&#39;s Richest (25 分)

1055 The World's Richest (25 分) Forbes magazine publishes every year its list of billionaires based on the annual ranking of the world's wealthiest people. Now you are supposed to simulate this job, but concentrate only on the people in a certain ran