比赛 期末考试2 评测结果 AAAAAAAAAA
题目名称 物流 最终得分 100
用户昵称 梦那边的美好ME 运行时间 1.846 s
代码语言 C++ 内存使用 24.63 MiB
提交时间 2026-02-10 10:26:59
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long

struct node{
    char t;
    ll k,v,c,s;
}t[2100000];

ll n,m;
ll csz[2100000],ssz[2100000];
ll a[2100000],as[2100000];
ll v[2100000],sv[2100000];
ll cnt;

void addc(ll i,ll d){
    for (;i<2100000;i+=i&-i) csz[i]+=d;
}

void adds(ll i,ll d){
    for (;i<2100000;i+=i&-i) ssz[i]+=d;
}

ll queryc(ll i){
    ll r=0;
    for (;i;i-=i&-i) r+=csz[i];
    return r;
}

ll querys(ll i){
    ll r=0;
    for (;i;i-=i&-i) r+=ssz[i];
    return r;
}

ll get(ll x){
    ll l=1,r=cnt;
    while (l<=r){
        ll mid=(l+r)>>1;
        if (sv[mid]==x) return mid;
        else if (sv[mid]<x)l=mid+1;
        else r=mid-1;
    }
    return 0;
}

int main(){
    freopen("logistics.in","r",stdin);
    freopen("logistics.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    v[++cnt]=0;
    for (int i=0;i<m;i++){
        char ss;
        cin>>ss;
        if (ss=='U'){
            ll k,a;
            cin>>k>>a;
            t[i]={'U',k-1,a,0,0};
            v[++cnt]=a;
        }else{
            ll c,s;
            cin>>c>>s;
            t[i]={'Z',0,0,c,s};
            v[++cnt]=s;
        }
    }
    for (int i=1;i<=cnt;i++){
        sv[i]=v[i];
    }
    sort(sv+1,sv+cnt+1);
    ll ls=1;
    for (int i=2;i<=cnt;i++){
        if (sv[i]!=sv[ls]){
            sv[++ls]=sv[i];
        }
    }
    cnt=ls;
    ll o=get(0);
    addc(o,n);
    for (int i=0;i<n;i++){
        a[i]=0;
        as[i]=o;
    }
    for (int i=0;i<m;i++){
        if (t[i].t=='U'){
            ll k=t[i].k,nv=t[i].v;
            ll ni=get(nv);
            ll oi=as[k],ov=a[k];
            addc(oi,-1);
            adds(oi,-ov);
            addc(ni,1);
            adds(ni,nv);
            a[k]=nv;
            as[k]=ni;
        }else{
            ll c=t[i].c,s=t[i].s;
            ll ti=cnt+1,l=1,r=cnt;
            while (l<=r){
                ll m=(l+r)>>1;
                if (sv[m]>=s){
                    ti=m;
                    r=m-1;
                }else l=m+1;
            }
            ti--;
            ll sml=querys(ti);
            ll cntl=queryc(ti);
            ll tot=sml+(ll)s*(n-cntl);
            if (tot>=(ll)c*s)puts("TAK");
            else puts("NIE");
        }
    }
    return 0;
}