mairuisheng • 11个月前
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,k=0x7f,s[5],ans1,ans2,ans3;
long long n;
int main()
{
long long n;
scanf("%lld %d %d %d %d",&n,&a,&b,&c,&d);
s[1]=a+b;
s[2]=a+c;
s[3]=b+d;
s[4]=c+d;
ans1=max(s[1],max(s[2],max(s[3],s[4])));
ans2=min(s[1],min(s[2],min(s[3],s[4])));
ans3=n-ans1+ans2;
ans3=max(ans3,0);
printf("%d",ans3*n);
return 0;
}
}
复杂又难推的公式。
#include<bits/stdc++.h>
using namespace std;
int a[1000005],v[1000005],pr[1000005],k,n,i,j;
long long ans=1;
int main()
{
scanf("%d",&n);
for(i=2;i<=n;++i)
{
if(!v[i])
{
v[i]=i;
k++;
pr[k]=i;
}
for(j=1;j<=k&&pr[j]*i<=n;++j)
{
v[i*pr[j]]=pr[j];
if(i%pr[j]==0)break;
}
}
for(i=1;i<=n;++i)
{
for(j=i;j>1;j/=v[j])
{
a[v[j]]++;
a[v[j]]%=1000000007;
}
}
for(i=1;i<=n;++i)
{
ans*=(2*a[i]+1);
ans%=1000000007;
}
printf("%lld",ans);
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define int long long
#define endl '\n'
const int N = 3e5 + 55, MOD = 1e9 + 7;
int n, m, a[N];
vector<int> g[N];
signed main() {
cin.tie(0), ios_base::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i], g[a[i]].push_back(i);
for (int i = 1, tp, x, y, z; i <= m; i++) {
cin >> tp >> x;
if (tp == 1) {
cin >> y >> z;
cout << upper_bound(g[z].begin(), g[z].end(), y) - lower_bound(g[z].begin(), g[z].end(), x)
<< endl;
} else {
if (a[x] == a[x + 1])
continue;
auto t = lower_bound(g[a[x]].begin(), g[a[x]].end(), x);
*t = x + 1;
t = lower_bound(g[a[x + 1]].begin(), g[a[x + 1]].end(), x + 1);
*t = x;
swap(a[x], a[x + 1]);
}
}
return 0;
}
#include <cstdio>
const int maxn = 1e6 + 10;
long long n, m, c[maxn], b[maxn], k;
int s1[maxn], s2[maxn], sz1, sz2, p, ans;
int main() {
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; i++) scanf("%lld", c + i);
while (m--) {
scanf("%lld", &k);
for (int i = 1; i <= n; i++) c[i] -= k;
for (int i = 1; i <= n; i++) b[i] = b[i - 1] + c[i];
s1[sz1 = 1] = 0;
for (int i = 1; i <= n; i++) {
if (b[s1[sz1]] > b[i])
s1[++sz1] = i;
}
s2[sz2 = 1] = n;
for (int i = n - 1; i >= 0; i--) {
if (b[s2[sz2]] < b[i])
s2[++sz2] = i;
}
p = 1;
ans = 0;
for (int i = sz2; i >= 1; i--) {
while (p <= sz1 && b[s1[p]] > b[s2[i]]) p++;
if (p <= sz1 && s2[i] - s1[p] > ans)
ans = s2[i] - s1[p];
}
printf("%d\n", ans);
for (int i = 1; i <= n; i++) c[i] += k;
}
return 0;
}
评论: