昨天比赛时浩神写的这道题,当时我想了想,大致有了个思路,只是感觉绝对会超时,所以一直没写。没想到这道题数据弱了,浩神给过了。今天来了后试着写了一下,没想到,这一写就写了快一天。。。。。悲剧。。。已经有了思路,还是tle了几次,,题目:
Problem 2077 The tallest tree
Accept: 41 Submit: 176 Time Limit: 1000 mSec Memory Limit : 65536 KB
Problem Description
lzs种了n棵树,每棵树每天长高一定的高度。某一天,lzs想知道树长得怎么样了,你能求出那一天最高的树有多高吗?
Input
有多组测试数据,每组数据第一行输入两个整数n,m(1<=n,m<=100000),接下来n行,每行两个整数a,b(0<=a,b<=100000),表示第i棵树在第0天的高度以及每天生长的高度。接下来m行,每行一个整数x(0<=x<=100000),表示询问第x天最高的树有多高。
Output
对于每个询问输出一行,为当天最高的树的高度。
Sample Input
1 310 4123
Sample Output
141822
#include#include #include #include using namespace std;const int N=100005;struct tree{ int jishu,xielv;}tt[N];int day[N],newday[N];tree newtree[N];long long ans[N];bool cmp(tree a,tree b){ if(a.jishu==b.jishu) return a.xielv>b.xielv; return (a.jishu>b.jishu&&a.xielv>b.xielv);}int main(){ //freopen("11.txt","r",stdin); int n,t; while(~scanf("%d%d",&n,&t)){ for(int i=0;i tt[j].jishu&&maxxielv>tt[j].xielv)) {newtree[newpos].jishu=tt[j].jishu;newtree[newpos++].xielv=tt[j].xielv;} } for(int i=0;i maxvalue){ maxvalue=newtree[j].jishu+x*newtree[j].xielv; maxxielv=newtree[j].xielv; } } ans[x]=maxvalue; } for(int i=0;i