Kabaleo Lite【__int128】-2020牛客暑期多校8

题意:

题目链接:https://ac.nowcoder.com/acm/contest/5673/K

分析:

思路应该是挺简单,比赛的时候一直 \(WA\),最后才知道爆了 \(long\ long\),我。。。
C++ 关于int128在何种环境下能够使用

代码:

#include <bits/stdc++.h>

using namespace std;
typedef __int128 ll;
typedef pair<ll,int>P;
const int N=1e5+5;
priority_queue<P>que;
int pos[N],b[N];
inline void print(__int128 x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9)
        print(x/10);
    putchar(x%10+'0');
}
int main()
{
    int T,n,cas=0;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        while(!que.empty())
            que.pop();
        int a,ans1=0;
        ll ans2=0,sum=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a);
            sum+=a;
            que.push(make_pair(sum,i));
        }
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&b[i]);
            if(i==1)
            {
                pos[i]=1;
                continue;
            }
            if(b[i]<b[pos[i-1]]) pos[i]=i;
            else pos[i]=pos[i-1];
        }
        int p=n+1,cnt=0;
        while(!que.empty())
        {
            P now=que.top();
            que.pop();
            if(now.second>=p) continue;
            p=pos[now.second];
            ans2+=now.first*(b[p]-cnt);
            cnt=b[p];
        }
        printf("Case #%d: %d ",++cas,b[1]);
        print(ans2);
        printf("\n");
    }
    return 0;
}

posted @ 2020-08-03 21:33  xzx9  阅读(103)  评论(0编辑  收藏  举报