比赛 期末考试2 评测结果 AAAAAAAAAA
题目名称 物流 最终得分 100
用户昵称 dream 运行时间 3.721 s
代码语言 C++ 内存使用 39.89 MiB
提交时间 2026-02-10 11:38:44
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000005,V=1000000000;
struct node{
	int cnt,ls,rs;
	ll sum;
}tr[N*21];
int n,m,tot,root;
void pushup(int p){
	tr[p].sum=tr[tr[p].ls].sum+tr[tr[p].rs].sum;
	tr[p].cnt=tr[tr[p].ls].cnt+tr[tr[p].rs].cnt;
}
void update(int &p,int l,int r,int x,ll v){
	if(!p) p=++tot;
	if(l==r){
		tr[p].cnt+=v;
		tr[p].sum+=v*x;
		return;
	}
	int mid=(l+r)/2;
	if(x<=mid) update(tr[p].ls,l,mid,x,v);
	else update(tr[p].rs,mid+1,r,x,v);
	pushup(p);
}
ll query_sum(int p,int l,int r,int x){
	if(!p) return 0;
	if(r<=x) return tr[p].sum;
	int mid=(l+r)/2;
	ll sum=0;
	sum+=query_sum(tr[p].ls,l,mid,x);
	if(x>mid){
		sum+=query_sum(tr[p].rs,mid+1,r,x);
	}
	return sum;
}
int query_cnt(int p,int l,int r,int ql,int qr){
	if(ql<=l&&r<=qr) return tr[p].cnt;
	int mid=(l+r)/2;
	int cnt=0;
	if(ql<=mid) cnt+=query_cnt(tr[p].ls,l,mid,ql,qr);
	if(qr>mid) cnt+=query_cnt(tr[p].rs,mid+1,r,ql,qr);
	return cnt;
}
int c[N];
int main(){
	freopen("logistics.in","r",stdin);
	freopen("logistics.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		char op;
		int a,b;
		cin>>op>>a>>b;
		if(op=='U'){
			if(c[a]) update(root,1,V,c[a],-1);
			if(b) update(root,1,V,b,1);
			c[a]=b;
		}
		else{
			int qcnt1=query_cnt(root,1,V,1,V),qcnt2=query_cnt(root,1,V,b,V);
			ll qsum=query_sum(root,1,V,b-1);
			if(qcnt1<a){
				cout<<"NIE\n";
			}
			else{
				if(qcnt2>=a){
					cout<<"TAK\n";
				}
				else{
					if(qsum/b+qcnt2>=a){
						cout<<"TAK\n";
					}
					else{
						cout<<"NIE\n";
					}
				}
			}
		}
	}
	return 0;
}