省选专练POI2015Logistyka

20 篇文章 0 订阅
2 篇文章 0 订阅

冷静分析:

一个那种东西怎么会被使用?

对于大于s的最多次次被选贡献为s

小余的贡献为本来的权值。

辣么怎么办?

两个树状数组分别维护这两个值就好了(一个是值的个数,一个是值的和)

#include<bits/stdc++.h>
using namespace std;
typedef int INT;
#define int long long 
const int N=2e6+100;
const int maxn=2e6+1;
inline void read(int &x){
	x=0;
	int f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	x*=f;
}
struct BIT{
	int T[N];
	BIT(){
		memset(T,0,sizeof(T));
	}
	inline int lowbit(int x){
		return x&(-x);
	}
	void update(int x,int val){
		if(x==0)
			return;
		while(x<=maxn){
			T[x]+=val;
			x+=lowbit(x);
		}
	}
	int query(int x){
		int ret=0;
		while(x){
			ret+=T[x];
			x-=lowbit(x);
		}
		return ret;
	}
}A,B;
int n,m;
int sum[N]={};
int mmp[N]={};
int cnt=0;
struct Query{
	int c,x,y;
}Q[N]; 
INT main(){
//	freopen("3471.in","r",stdin);
	read(n);
	read(m);
	for(int i=1;i<=m;i++){
		char opt[3];
		scanf("%s",opt);
		if(opt[0]=='U'){
			Q[i].c=1;
			read(Q[i].x);
			read(Q[i].y);
			cnt++;
			mmp[cnt]=Q[i].y;
		}
		else{
			Q[i].c=2;
			read(Q[i].x);
			read(Q[i].y);
			cnt++;
			mmp[cnt]=Q[i].y;
		}
	}
	sort(mmp+1,mmp+1+cnt);
	cnt=unique(mmp+1,mmp+1+cnt)-mmp-1;
	for(int i=1;i<=m;i++){
		if(Q[i].c==1){
			int k,a;
//			cout<<"in";
			k=Q[i].x;
			a=Q[i].y;
			a=lower_bound(mmp+1,mmp+1+cnt,a)-mmp;
			A.update(sum[k],-mmp[sum[k]]);
			A.update(a,mmp[a]);
//			cout<<"here"<<'\n';
			B.update(sum[k],-1);
			B.update(a,1);
			sum[k]=a; 
		}
		else{
			int c=Q[i].x;
			int s=Q[i].y;
			s=lower_bound(mmp+1,mmp+1+cnt,s)-mmp;
			int ans=A.query(s-1);
			ans+=(B.query(maxn)-B.query(s-1))*mmp[s];
			//cout<<"ans= "<<ans<<" ";
			if(ans<c*mmp[s]){
				puts("NIE");
				//printf("NIE\n");
			}
			else puts("TAK");//cout<<"TAK"<<'\n';
		}
	}
	//cout<<A.query(10);
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值