题目:点击打开链接
题意:有三种操作,1是向箱子里加入给定p值q值的糖果,0是一只给定x值y值的狗询问他能获得的最大价值(=p*x+q*y)需要输出,-1是狗王吃掉一个给定p值q值的糖果。
思路:这道题没啥说的,直接暴力模拟就行了。开始还以为要用线段树啥的降低时间复杂度,结果一看时间限制就呵呵了。用一个数组当作箱子,往里面增删查。不知道为什么现场赛通过人数那么少而且竟然不是第一个A掉的题,可能是被时间限制坑了吧,这道题的时间限制是30s,是的你没有看错。直接上代码吧。
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const long long eps=1e9+7;
struct node
{
long long t,x,y;
}a[50000];
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==0)
break;
int k=0;
long long x,y,z;
int flag;
while(n--)
{
scanf("%lld%lld%lld",&x,&y,&z);
if(x==1)
{
a[k].t=1;
a[k].x=y;
a[k].y=z;
k++;
}
else if(x==-1)
{
long long maxx=-eps*eps*2;
for(int i=0;i<k;i++)
if(y==a[i].x&&z==a[i].y&&a[i].t==1)
{
a[i].t=0;
break;
}
}
else
{
long long maxx=-eps*eps*2;
for(int i=0;i<k;i++)
if(maxx<y*a[i].x+z*a[i].y&&a[i].t==1)
{
maxx=y*a[i].x+z*a[i].y;
}
printf("%lld\n",maxx);
}
}
}
return 0;
}