| 比赛 |
期末考试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;
}