Submission #68521

#TimeUsernameProblemLanguageResultExecution timeMemory
68521tempytemptempDivide and conquer (IZhO14_divide)C++14
100 / 100
215 ms3396 KiB
/*
  We found Despacito 5 during contest (not clickbait)
*/
#include	<iostream>
#include	<cstdio>
#include	<vector>
#include 	<set>
#include	<map>
#include	<queue>
#include	<stack>
#include	<algorithm>
#include	<cstring>
#include	<cfloat>
#include	<cmath>
#include	<cassert>
#include	<locale>
#include	<string>
#include	<bitset>
#include	<functional>
#include	<climits>
#include	<iomanip>
using namespace std;

#define read(x)     freopen(x,"r",stdin)
#define write(x)    freopen(x,"w",stdout)
#define cl(a,b)	    memset(a,b,sizeof(a))
#define all(x)      x.begin(),x.end()
#define rall(x)     x.rbegin(),x.rend()
#define ll          long long
#define ld          long double
#define vec         vector
#define vi          vec<int>
#define heap        priority_queue
#define res         reserve
#define pb          push_back
#define f(x,y,z)    for(int x=(y); x<(z); x++)
#define fd(x,y,z)   for(int x=(y); x>=(z); x--)
#define fit(x,y)    for(auto x: y)
#define srt(x)      sort(all(x))
#define rsrt(x)     sort(rall(x))
#define make_unique(x) sort(all((x))); (x).resize(unique(all((x))) - (x).begin())
#define pii         pair<int,int>
#define ppi         pair<pii,int>
#define pip         pair<int,pii>
#define mp          make_pair
#define f1          first
#define s2          second
#define cdbg(x)     cerr<<#x<<" = "<<x<<",\t";
#define cdbl        cerr<<"\n----------\n";
#define pow2(x)     ((x)*(x))
#define edist(x1, y1, x2, y2) (sqrt((pow2(x1-x2)+pow2(y1-y2))))
#define mdist(x1, y1, x2, y2) (abs((x1)-(x2))+abs((y1)-(y2)))
#define y1          FullSensei
#define left        (si<<1)
#define right       ((si<<1)+1)
#define pi          3.141592653589793
#define popcount    __builtin_popcount
#define spc			' '
#define endl		'\n'
#define in			insert
#define up_b		upper_bound
#define low_b 		lower_bound
#define Decimal		fixed<<setprecision(20)

bool checkbit(int x,int y){return (x&(1<<y));}
int setbit(int x,int y){return (x^(1<<y));}
const int dirs[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
const int mod=1e9+7;
const int p1=805306457;
const int p2=1610612741;
const int INF=1e9;
const int N=1e5;
struct mine{
	int x, g, d;
//	mine(int xx, int gg, int dd){
//		x=xx;
//		g=gg;
//		d=dd;
//	}
};
mine a[N+7];
int n;

ll preg[N+7];
ll pred[N+7];

int xlb(int ss, int se, int i){
	if(ss<1 || se>n)
		return -1;
	if(ss>se)
		return -1;
	if(ss==se){
		if(a[ss].x == i)
			return ss;
		else
			return -1;
	}
	int jump=1;
	while(ss+jump*2<=se)	jump*=2;
	for(;jump>0;jump/=2){
		int mid=ss+jump;
//		cerr<<ss<<spc<<jump<<spc<<mid<<spc<<se<<spc<<i<<endl;
		if(mid>se)
			continue;
		if(a[mid].x>i){
			se=mid-1;
		}
		else if(a[mid].x==i){
			return mid;
		}
		else{
			ss=mid;
		}
	}
	return ss;
}

int main(){
	scanf("%d",&n);
	f(i,1,n+1){
		cin>>a[i].x>>a[i].g>>a[i].d;
	}
	f(i,1,n+1){
		preg[i]=preg[i-1]+a[i].g;
		pred[i]=pred[i-1]+a[i].d;
	}
	ll ans=0;
	int r=0;
	f(i,1,n+1){
		fd(j,n,max(i,r+1)){
			ll totd=pred[j] - pred[i-1];
			if(totd >= a[j].x-a[i].x){
				ans=max(ans, preg[j] - preg[i-1]);
				r=j;
				break;
			}
			else{
				j=min(j,xlb(i,j,a[i].x+totd)+1);
				if(j<1 || j>n)
					break;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

Compilation message (stderr)

divide.cpp: In function 'int main()':
divide.cpp:119:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...