Submission #868575

# Submission time Handle Problem Language Result Execution time Memory
868575 2023-10-31T21:58:40 Z vaaven Triple Jump (JOI19_jumps) C++14
100 / 100
882 ms 60160 KB
#include <bits/stdc++.h>
using namespace std;
 
using uint=unsigned;
using ll=long long;
using ull=unsigned long long;
// #define int ll
 
#define FOR(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) FOR(i,0,b)
#define ROF(i,a,b) for(int i=int(b)-1;i>=a;i--)
#define per(i,b) ROF(i,0,b)
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define eb emplace_back
#define all(x) x.begin(),x.end()
auto& errStream=cerr;
#ifdef LOCAL
#define cerr (cerr<<"-- line "<<__LINE__<<" -- ")
#else
class CerrDummy{}cerrDummy;
template<class T>
CerrDummy& operator<<(CerrDummy&cd,const T&){
	return cd;
}
using charTDummy=char;
using traitsDummy=char_traits<charTDummy>;
CerrDummy& operator<<(CerrDummy&cd,basic_ostream<charTDummy,traitsDummy>&(basic_ostream<charTDummy,traitsDummy>&)){
	return cd;
}
#define cerr cerrDummy
#endif
#define reach cerr<<"reached"<<endl
void dmpr(decltype(cerr)&os){os<<endl;}
template<class T,class... Args>
void dmpr(decltype(cerr)&os,const T&t,const Args&... args){
	os<<t<<" ";
	dmpr(os,args...);
}
#define dmp(...) dmpr(cerr,##__VA_ARGS__)
#define zero(x) memset(x,0,sizeof(x))
#define one(x) memset(x,-1,sizeof(x))
#define fs first
#define sc second
#define bg begin()
#define ed end()
 
template<class T> using V=vector<T>;
template<class T> using VV=V<V<T>>;
 
using pi=pair<int,int>;
using vi=vector<int>;
using ld=long double;
 
template<class T,class U>
ostream& operator<<(ostream& os,const pair<T,U>& p){
	os<<"("<<p.first<<","<<p.second<<")";
	return os;
}
 
template<class T>
ostream& operator <<(ostream& os,const vector<T>& v){
	os<<"{";
	rep(i,(int)v.size()){
		if(i)os<<",";
		os<<v[i];
	}
	os<<"}";
	return os;
}
 
template<int i,class T>
void print_tuple(ostream&,const T&){
}
 
template<int i,class T,class H,class ...Args>
void print_tuple(ostream&os,const T&t){
	if(i)os<<",";
	os<<get<i>(t);
	print_tuple<i+1,T,Args...>(os,t);
}
 
template<class ...Args>
ostream& operator<<(ostream&os,const tuple<Args...>&t){
	os<<"(";
	print_tuple<0,tuple<Args...>,Args...>(os,t);
	return os<<")";
}
 
ll read(){
	ll i;
	scanf("%lld",&i);
	return i;
}
 
void printSpace(){
	printf(" ");
}
 
void printEoln(){
	printf("\n");
}
 
void print(ll x,int suc=1){
	printf("%lld",x);
	if(suc==1)
		printEoln();
	if(suc==2)
		printSpace();
}
 
vi readvi(int n,int off=0){
	vi v(n);
	rep(i,n)v[i]=read()+off;
	return v;
}
 
template<class T>
void print(const vector<T>&v,int suc=1){
	rep(i,v.size())
		print(v[i],i==int(v.size())-1?suc:2);
}
 
string readString(){
	static char buf[3341000];
	scanf("%s",buf);
	return string(buf);
}
 
char* readCharArray(){
	static char buf[3341000];
	static int bufUsed=0;
	char* ret=buf+bufUsed;
	scanf("%s",ret);
	bufUsed+=strlen(ret)+1;
	return ret;
}
 
template<class T,class U>
void chmax(T& a,U b){
	if(a<b)
		a=b;
}
 
template<class T,class U>
void chmin(T& a,U b){
	if(b<a)
		a=b;
}
 
template<class T>
T Sq(const T& t){
	return t*t;
}
 
//#define CAPITAL
void Yes(bool ex=true){
	#ifdef CAPITAL
	cout<<"YES"<<endl;
	#else
	cout<<"Yes"<<endl;
	#endif
	if(ex)exit(0);
}
void No(bool ex=true){
	#ifdef CAPITAL
	cout<<"NO"<<endl;
	#else
	cout<<"No"<<endl;
	#endif
	if(ex)exit(0);
}
 
const ll infLL=LLONG_MAX/3;
 
#ifdef int
const int inf=infLL;
#else
const int inf=INT_MAX/2-100;
#endif
 
constexpr ll TEN(int n){
	return n==0?1:TEN(n-1)*10;
}
 
template<class T>
vector<T> uni(const vector<T>&vv){
	auto v(vv);
	sort(all(v));
	v.erase(unique(all(v)),v.end());
	return v;
}
template<class T>
void mkuni(vector<T>&v){
	sort(all(v));
	v.erase(unique(all(v)),v.end());
}
 
//ayasii
int topbit(signed t){
	return t==0?-1:31-__builtin_clz(t);
}
int topbit(ll t){
	return t==0?-1:63-__builtin_clzll(t);
}
int popcount(signed t){
	return __builtin_popcount(t);
}
int popcount(ll t){
	return __builtin_popcountll(t);
}
bool ispow2(int i){
	return i&&(i&-i)==i;
}
 
bool inc(int a,int b,int c){
	return a<=b&&b<=c;
}
 
template<class Node>
struct SegTreeBeats{
	V<Node> buf;
	int s;
	template<class T>
	SegTreeBeats(const V<T>& a){
		int n=a.size();
		s=1;
		while(s<n)s*=2;
		buf.resize(s*2);
		rep(i,n)
			buf[s+i]=Node(a[i]);
		ROF(i,1,s)
			upd(i);
	}
	void push(int i){
		buf[i].push(buf[i*2],buf[i*2+1]);
	}
	void upd(int i){
		buf[i].upd(buf[i*2],buf[i*2+1]);
	}
	template<class F,class... Args>
	void chr(int l,int r,int i,int b,int e,F f,Args... args){
		if(e<=l||r<=b)
			return;
		if(b<=l&&r<=e){
			if((buf[i].*f)(args...)){
				return;
			}
		}
		push(i);
		int m=(l+r)/2;
		chr(l,m,i*2,b,e,f,args...);
		chr(m,r,i*2+1,b,e,f,args...);
		upd(i);
	}
	template<class F,class... Args>
	void ch(int b,int e,F f,Args... args){
		if(b<e)
			chr(0,s,1,b,e,f,args...);
	}
	template<class F,class G,class H>
	decltype((declval<Node>().*F())()) getr(int l,int r,int i,int b,int e,F f,G g,H h){
		if(e<=l||r<=b)
			return h;
		if(b<=l&&r<=e)
			return (buf[i].*f)();
		push(i);
		int m=(l+r)/2;
		return g(getr(l,m,i*2,b,e,f,g,h),getr(m,r,i*2+1,b,e,f,g,h));
	}
	template<class F,class G,class H>
	decltype((declval<Node>().*F())()) get(int b,int e,F f,G g,H h){
		return getr(0,s,1,b,e,f,g,h);
	}
};
 
//usage
 
struct Node{
	int ad,raw,mx;
	Node(int v=0){
		ad=0;
		raw=mx=v;
	}
	void lazy(int v){
		chmax(ad,v);
		chmax(mx,raw+ad);
	}
	void push(Node&x,Node&y){
		x.lazy(ad);
		y.lazy(ad);
	}
	void upd(const Node&x,const Node&y){
		raw=max(x.raw,y.raw);
		mx=max(x.mx,y.mx);
	}
	bool chad(int v){
		lazy(v);
		return true;
	}
	int getmx(){return mx;}
};
 
signed main(){
	int n=read();
	vi a=readvi(n);
	SegTreeBeats<Node> seg(a);
	int q=read();
	vi ans(q);
	VV<pi> qs(n);
	rep(i,q){
		int l=read()-1,r=read();
		qs[l].eb(r,i);
	}
	vi idx;
	const auto upd=[&](int i,int j){
		int k=j*2-i;
		if(k<n)
			seg.ch(k,n,&Node::chad,a[i]+a[j]);
	};
	per(i,n){
		while(idx.size()){
			int j=idx.back();
			upd(i,j);
			if(a[i]<a[j])
				break;
			idx.pop_back();
		}
		idx.pb(i);
		
		for(auto p:qs[i]){
			ans[p.sc]=seg.get(i+2,p.fs,&Node::getmx,[&](int x,int y){return max(x,y);},-inf);
		}
	}
	rep(i,q)
		print(ans[i]);
}

Compilation message

jumps.cpp: In function 'll read()':
jumps.cpp:93:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   93 |  scanf("%lld",&i);
      |  ~~~~~^~~~~~~~~~~
jumps.cpp: In function 'std::string readString()':
jumps.cpp:127:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  127 |  scanf("%s",buf);
      |  ~~~~~^~~~~~~~~~
jumps.cpp: In function 'char* readCharArray()':
jumps.cpp:135:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  135 |  scanf("%s",ret);
      |  ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 448 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 448 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 242 ms 19184 KB Output is correct
12 Correct 242 ms 19280 KB Output is correct
13 Correct 247 ms 19136 KB Output is correct
14 Correct 252 ms 19400 KB Output is correct
15 Correct 235 ms 19284 KB Output is correct
16 Correct 237 ms 18756 KB Output is correct
17 Correct 239 ms 18512 KB Output is correct
18 Correct 236 ms 18516 KB Output is correct
19 Correct 235 ms 19204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 151 ms 13652 KB Output is correct
2 Correct 82 ms 14796 KB Output is correct
3 Correct 79 ms 13820 KB Output is correct
4 Correct 164 ms 13904 KB Output is correct
5 Correct 152 ms 13660 KB Output is correct
6 Correct 153 ms 13164 KB Output is correct
7 Correct 149 ms 13056 KB Output is correct
8 Correct 154 ms 13052 KB Output is correct
9 Correct 150 ms 13392 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 448 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 242 ms 19184 KB Output is correct
12 Correct 242 ms 19280 KB Output is correct
13 Correct 247 ms 19136 KB Output is correct
14 Correct 252 ms 19400 KB Output is correct
15 Correct 235 ms 19284 KB Output is correct
16 Correct 237 ms 18756 KB Output is correct
17 Correct 239 ms 18512 KB Output is correct
18 Correct 236 ms 18516 KB Output is correct
19 Correct 235 ms 19204 KB Output is correct
20 Correct 151 ms 13652 KB Output is correct
21 Correct 82 ms 14796 KB Output is correct
22 Correct 79 ms 13820 KB Output is correct
23 Correct 164 ms 13904 KB Output is correct
24 Correct 152 ms 13660 KB Output is correct
25 Correct 153 ms 13164 KB Output is correct
26 Correct 149 ms 13056 KB Output is correct
27 Correct 154 ms 13052 KB Output is correct
28 Correct 150 ms 13392 KB Output is correct
29 Correct 861 ms 54336 KB Output is correct
30 Correct 674 ms 56560 KB Output is correct
31 Correct 654 ms 54096 KB Output is correct
32 Correct 857 ms 54164 KB Output is correct
33 Correct 882 ms 54172 KB Output is correct
34 Correct 857 ms 52220 KB Output is correct
35 Correct 856 ms 51652 KB Output is correct
36 Correct 857 ms 51776 KB Output is correct
37 Correct 866 ms 53332 KB Output is correct
38 Correct 724 ms 59960 KB Output is correct
39 Correct 712 ms 60160 KB Output is correct
40 Correct 697 ms 56656 KB Output is correct
41 Correct 696 ms 56144 KB Output is correct
42 Correct 692 ms 55976 KB Output is correct
43 Correct 699 ms 57768 KB Output is correct
44 Correct 724 ms 59216 KB Output is correct
45 Correct 745 ms 59004 KB Output is correct
46 Correct 718 ms 56140 KB Output is correct
47 Correct 720 ms 55792 KB Output is correct
48 Correct 724 ms 55884 KB Output is correct
49 Correct 724 ms 57940 KB Output is correct
50 Correct 768 ms 57468 KB Output is correct
51 Correct 779 ms 57660 KB Output is correct
52 Correct 785 ms 55216 KB Output is correct
53 Correct 764 ms 54724 KB Output is correct
54 Correct 771 ms 55072 KB Output is correct
55 Correct 810 ms 56400 KB Output is correct