QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#69701 | #2356. Partition of Queries | BowieSHI | TL | 9ms | 9876kb | C++14 | 2.1kb | 2022-12-30 15:26:16 | 2022-12-30 15:26:19 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<vector>
#define INF 1e18
#define MAXN 1000010
using namespace std;
typedef long long ll;
int n;
ll y;
char s[MAXN];
ll s1[MAXN],s2[MAXN];
ll f[MAXN],ans;
ll k[MAXN],b[MAXN];
int stk[MAXN],tp;
double calc (int x,int u)
{
return (1.0*b[u]-b[x])/(k[x]-k[u]);
}
void stk_push (int x)
{
/*
while (tp>1)
{
if (calc (x,stk[tp-1])>calc (stk[tp],stk[tp-1])) tp--;
else break;
}
*/
stk[++tp]=x;
}
ll get (int x)
{
if (tp==0) return -INF;
int l=1,r=tp;
/*
while (l<r)
{
int mid=(l+r)>>1;
if ((mid==1||(s2[x]<=calc (stk[mid],stk[mid-1])&&mid>1))&&(mid==tp||(s2[x]>=calc (stk[mid],stk[mid+1])&&mid<tp)))
return k[stk[mid]]*s2[x]+b[stk[mid]];
if (mid-1>=1&&s2[x]>calc (stk[mid],stk[mid-1])) r=mid-1;
else l=mid+1;
}
*/
ll tmp=0;
for (int i=1;i<=tp;i++)
tmp=max (tmp,k[stk[i]]*s2[x]+b[stk[i]]);
return tmp;
for (int i=max (1,l-5);i<=min (r+5,tp);i++)
tmp=max (tmp,k[stk[i]]*s2[x]+b[stk[i]]);
return tmp;
/*
if (l!=0&&l<=tp&&(l==1||(s2[x]<=calc (stk[l],stk[l-1])&&l>1))&&(l==tp||(s2[x]>=calc (stk[l],stk[l+1])&&l<tp)))
return k[stk[l]]*s2[x]+b[stk[l]];
return k[stk[r]]*s2[x]+b[stk[r]];
*/
}
int main()
{
scanf ("%d%lld",&n,&y);
scanf ("%s",s+1);
for (int i=1;i<=n;i++)
{
s1[i]=s1[i-1];
if (s[i]=='+') s1[i]++;
}
for (int i=n;i>=1;i--)
{
s2[i]=s2[i+1];
if (s[i]=='?') s2[i]++;
}
for (int i=1;i<=n;i++)
if (s[i]=='?')
ans+=s1[i];
for (int i=1;i<=n;i++) f[i]=-INF;
for (int i=1;i<=n;i++)
{
if (s[i]=='?')
{
f[i]=max (s1[i]*s2[i]-y,-y+s1[i]*s2[i]+get (i));
k[i]=-s1[i],b[i]=f[i];
stk_push (i);
}
}
ll Max=0;
for (int i=1;i<=n;i++)
if (s[i]=='?')
Max=max (Max,f[i]);
printf ("%lld",ans-Max);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 7716kb
input:
6 5 ++??+?
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 3ms
memory: 7656kb
input:
6 8 ++??+?
output:
7
result:
ok single line: '7'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3748kb
input:
5 1 +++++
output:
0
result:
ok single line: '0'
Test #4:
score: 0
Accepted
time: 2ms
memory: 9752kb
input:
10 0 ++?+??++??
output:
0
result:
ok single line: '0'
Test #5:
score: 0
Accepted
time: 2ms
memory: 7880kb
input:
12 100 +?+++??+??++
output:
19
result:
ok single line: '19'
Test #6:
score: 0
Accepted
time: 0ms
memory: 9804kb
input:
1 1 ?
output:
0
result:
ok single line: '0'
Test #7:
score: 0
Accepted
time: 3ms
memory: 7576kb
input:
9 7 ++++++++?
output:
7
result:
ok single line: '7'
Test #8:
score: 0
Accepted
time: 3ms
memory: 7884kb
input:
9 8 ++++++++?
output:
8
result:
ok single line: '8'
Test #9:
score: 0
Accepted
time: 2ms
memory: 9828kb
input:
10 15 ++++++++??
output:
15
result:
ok single line: '15'
Test #10:
score: 0
Accepted
time: 3ms
memory: 7776kb
input:
5 3 +?+?+
output:
3
result:
ok single line: '3'
Test #11:
score: 0
Accepted
time: 2ms
memory: 7708kb
input:
10 5 +?+?+??+??
output:
10
result:
ok single line: '10'
Test #12:
score: 0
Accepted
time: 0ms
memory: 7884kb
input:
10 7 +?+?+??+??
output:
12
result:
ok single line: '12'
Test #13:
score: 0
Accepted
time: 2ms
memory: 7560kb
input:
15 4 +?+?+??+??+??+?
output:
14
result:
ok single line: '14'
Test #14:
score: 0
Accepted
time: 2ms
memory: 7780kb
input:
15 6 +?+?+??+??+??+?
output:
18
result:
ok single line: '18'
Test #15:
score: 0
Accepted
time: 0ms
memory: 7844kb
input:
19 8 +?+?+??+??+??+?++??
output:
28
result:
ok single line: '28'
Test #16:
score: 0
Accepted
time: 1ms
memory: 7784kb
input:
20 9 +?+?+??+??+??+?++???
output:
30
result:
ok single line: '30'
Test #17:
score: 0
Accepted
time: 3ms
memory: 9868kb
input:
500 100 +?+?+??+??+??+?++?????++??+?+????????????+++?+?+???++?+?+++++++????++??+??+++??++++?++??+??+??+?????++++???+??++?+?++?++???++++???????+??????????++?+??+?+++???+?+???++?++?++++???++?++?????+??????+?++???++??+?++?+??+??++??++??++?+?+?+++??+??++????+?++?++?++??+?+++?+?+???+?+++?++?++++?????++++...
output:
2710
result:
ok single line: '2710'
Test #18:
score: 0
Accepted
time: 9ms
memory: 9876kb
input:
10000 100 +?+?+??+??+??+?++?????++??+?+????????????+++?+?+???++?+?+++++++????++??+??+++??++++?++??+??+??+?????++++???+??++?+?++?++???++++???????+??????????++?+??+?+++???+?+???++?++?++++???++?++?????+??????+?++???++??+?++?+??+??++??++??++?+?+?+++??+??++????+?++?++?++??+?+++?+?+???+?+++?++?++++?????++...
output:
56616
result:
ok single line: '56616'
Test #19:
score: -100
Time Limit Exceeded
input:
500000 3000 +?+?+??+??+??+?++?????++??+?+????????????+++?+?+???++?+?+++++++????++??+??+++??++++?++??+??+??+?????++++???+??++?+?++?++???++++???????+??????????++?+??+?+++???+?+???++?++?++++???++?++?????+??????+?++???++??+?++?+??+??++??++??++?+?+?+++??+??++????+?++?++?++??+?+++?+?+???+?+++?++?++++?????...