#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll maxm=55000;
const ll maxn=300;
const ll inf=0x3f3f3f3f;
ll n,m,d[maxn],u[maxm],d2[maxn],v[maxm],w[maxm],d1[maxn];
struct Dijkstra
{
struct Edge
{
ll next, to,w;
} e[maxm];
ll head[maxn],v[maxn],tol;
void add(ll u, ll v, ll w)
{
tol++;
e[tol].to = v;
e[tol].next = head[u];
e[tol].w = w;
head[u] = tol;
}
priority_queue<pair<long long,ll>,vector<pair<long long,ll> >,greater<pair<long long,ll> > >q1;
void dijkstra(ll s)
{
memset(d,inf,sizeof(d));
memset(v,0,sizeof(v));
d[s] = 0;
q1.push(make_pair(0, s));
while (!q1.empty())
{
ll x = q1.top().second;
q1.pop();
if (!v[x])
{
v[x] = 1;
for (register ll i = head[x]; i; i = e[i].next)
{
ll to=e[i].to;
if (d[to] > d[x] + e[i].w)
{
d[to] = d[x] + e[i].w;
q1.push(make_pair(d[to], to));
}
}
}
}
}
void init()
{
memset(head, 0, sizeof(head));
tol = 0;
}
} D;
int main()
{
scanf("%lld%lld",&n,&m);
for (ll i=1; i<=m; i++)
{
scanf("%lld%lld%lld",&u[i],&v[i],&w[i]);
D.add(u[i],v[i],w[i]);
D.add(v[i],u[i],w[i]);
}
D.dijkstra(1);
for (ll i=1; i<=n; i++)
{
d1[i]=d[i];
}
D.dijkstra(n);
for (ll i=1; i<=n; i++)
{
d2[i]=d[i];
}
ll ans=0;
for (ll i=1; i<=m; i++)
{
if (d1[u[i]]+w[i]+d2[v[i]]==d1[n]||d1[v[i]]+w[i]+d2[u[i]]==d1[n])
{
w[i]=w[i]*2;
D.init();
for (ll j=1; j<=m; j++)
{
D.add(u[j],v[j],w[j]);
D.add(v[j],u[j],w[j]);
}
D.dijkstra(1);
ans=max(ans,d[n]-d1[n]);
w[i]=w[i]/2;
}
}
printf("%lld\n",ans);
}
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int> >ans;
int n,a[101000],len[1000000];
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for (int i=1;i<=n;i++){
len[a[i]]++;
if (a[i+1]<a[i]){
for (int j=a[i];j>a[i+1];j--){
ans.push_back(make_pair(i-len[j]+1,i));
len[j-1]+=len[j];
len[j]=0;
}
}
}
printf("%d\n",ans.size());
for (int i=0;i<ans.size();i++){
printf("%d %d\n",ans[i].first,ans[i].second);
}
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,p;
struct node
{
ll a[2][2];
node operator*(const node &b) const
{
node res;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
res.a[i][j] = 0;
for (int k = 0; k < 2; k++)
{
res.a[i][j] = (res.a[i][j] + a[i][k] * b.a[k][j]%p) % p;
}
}
}
return res;
}
};
node pow(node b,ll c)
{
node res;
res.a[0][0] = 1;
res.a[1][0] = 0;
res.a[0][1] = 0;
res.a[1][1] = 1;
while (c)
{
if (c & 1)
{
res = res * b;
}
c >>= 1;
b = b * b;
}
return res;
}
int main()
{
node f,f1;
f.a[0][0] = 1;
f.a[1][0] = 1;
f.a[0][1] = 1;
f.a[1][1] = 0;
f1.a[0][0] = 3;
f1.a[0][1] = 1;
f1.a[1][0] = 0;
f1.a[1][1] = 0;
scanf("%lld%lld", &n,&p);
if (p==1)
{
printf("0\n");
return 0;
}
if (n==0){
printf("1\n");
return 0;
}
ll ans = (f1*pow(f, n-2)).a[0][0];
if (n%2==0){
ans=(ans-1+p)%p;
}
printf("%lld\n",ans);
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000010;
ll n,a,b,sum[N],c,l[N],r[N],ans=-99999999999999999;
int main(){
scanf("%lld%lld%lld",&n,&a,&b);
for (int i=1;i<=n;i++){
scanf("%lld",&c);
sum[i]=sum[i-1]+c;
l[i]=max(l[i-1],sum[i]);
}
r[n]=sum[n];
for (int i=n-1;i>=0;i--){
r[i]=min(r[i+1],sum[i]);
}
for (int i=0;i<=n;i++){
ans=max(ans,min((1+b)*r[i]-(a+1)*sum[i]-b*sum[n],b*(1+a)*sum[i]-a*(b+1)*l[i]-b*sum[n]));
}
cout<<ans<<endl;
}