//------------------------------------\\
// ------------------------------ \\
// | created by Dinh Manh Hung | \\
// | tht.onepunchac168 | \\
// | THPT CHUYEN HA TINH | \\
// | HA TINH, VIET NAM | \\
// | Siuuu | \\
// ------------------------------ \\
//------------------------------------\\
#include "candies.h"
#include <bits/stdc++.h>
using namespace std;
#define task ""
#define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
#define ldb long double
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define all(x) begin(x),end(x)
#define uniquev(v) v.resize(unique(all(v))-v.begin())
#define rep(i,a,b) for (int i=a;i<=b;i++)
#define cntbit(v) __builtin_popcountll(v)
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) ((1LL*a*b)/__gcd(a,b))
#define mask(x) (1LL<<(x))
#define readbit(x,i) ((x>>i)&1)
#define Yes cout << "Yes"
#define YES cout << "YES"
#define No cout << "No"
#define NO cout << "NO"
typedef long long ll;
typedef pair <ll,ll> ii;
typedef pair <ll,ii> iii;
typedef pair <ii,ii> iiii;
ll dx[]= {1,-1,0,0,1,-1,1,-1};
ll dy[]= {0,0,-1,1,1,-1,-1,1};
const ldb PI = acos (-1);
//const ll mod=978846151;
//const ll base=29;
const ll mod=1e9+7;
const char nl = '\n';
inline int ReadInt()
{
char co;
for (co = getchar(); co < '0' || co > '9'; co = getchar());
int xo = co - '0';
for (co = getchar(); co >= '0' && co <= '9'; co = getchar())
xo = (xo<<1) + (xo<<3) + co - '0';
return xo;
}
void WriteInt(int xo)
{
if (xo > 9)
WriteInt(xo / 10);
putchar(xo % 10 + '0');
}
/*
// DEBUG
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif
*/
/* END OF TEMPLATE*/
// ================= Solution =================//
/*
void onepunchac168();
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
file(task);
int tests;
tests=1;
//cin>>tests;
while (tests--)
{
onepunchac168();
}
}
*/
const int N=2e5+5;
const int Q=2e5+5;
int n,q;
vector <ii> vt[N];
ll maxsuff[4*N];
ll minsuff[4*N];
ll sum[4*N];
ll ss[N];
void update(int node,int l,int r,int u,ll val)
{
if (l>u||r<u)
{
return;
}
if (l==r)
{
sum[node]=val;
maxsuff[node]=val;
minsuff[node]=val;
return;
}
update(node*2,l,(l+r)/2,u,val);
update(node*2+1,(l+r)/2+1,r,u,val);
sum[node]=max(sum[node*2],sum[node*2+1]);
maxsuff[node]=max(maxsuff[node*2],maxsuff[node*2+1]+sum[node*2]);
minsuff[node]=min(minsuff[node*2],minsuff[node*2+1]+sum[node*2]);
}
ll querymax(int node,int l,int r,int u,int v)
{
if (l>v||r<u)
{
return -1e18-5;
}
if (l>=u&&r<=v)
{
return maxsuff[node];
}
ll aa=querymax(node*2,l,(l+r)/2,u,v);
ll bb=sum[node*2]+querymax(node*2+1,(l+r)/2+1,r,u,v);
return max(aa,bb);
}
ll querymin(int node,int l,int r,int u,int v)
{
if (l>v||r<u)
{
return 1e18+5;
}
if (l>=u&&r<=v)
{
return minsuff[node];
}
ll aa=querymin(node*2,l,(l+r)/2,u,v);
ll bb=sum[node*2]+querymin(node*2+1,(l+r)/2+1,r,u,v);
return min(aa,bb);
}
ll querysum(int node,int l,int r,int u,int v)
{
if (l>v||r<u)
{
return 0;
}
if (l>=u&&r<=v)
{
return sum[node];
}
return querysum(node*2,l,(l+r)/2,u,v)+querysum(node*2+1,(l+r)/2+1,r,u,v);
}
std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l,std::vector<int> r, std::vector<int> v) {
n = c.size();
vector <int > ans(n);
q= l.size();
for (int i=0;i<q;i++)
{
vt[l[i]+1].pb({i,1});
ss[l[i]+1]+=v[i];
ss[r[i]+2]-=v[i];
vt[r[i]+2].pb({i,-1});
}
ss[0]=0;
for (int i=1;i<=n;i++)
{
ss[i]+=ss[i-1];
for (auto u:vt[i])
{
if (u.se==1)
{
update(1,1,q,u.fi+1,v[u.fi]);
continue;
}
update(1,1,q,u.fi+1,0);
}
int left=1;
int right=q;
int res,la,ra;
while (left<=right)
{
int mid=(left+right)/2;
ll aa=querymax(1,1,q,mid,q);
ll bb=querymin(1,1,q,mid,q);
if (aa-bb<=c[i-1])
{
res=mid;
la=aa;
ra=bb;
right=mid-1;
}
else left=mid+1;
}
if (querymax(1,1,q,1,q)<=c[i]&&querymin(1,1,q,1,q)>=0)
{
ans[i-1]=ss[i];
continue;
}
ll hh=querysum(1,1,q,1,res-1);
if (hh>la)
{
ans[i-1]=ss[i]-ra;
}
else ans[i-1]=c[i-1]-(la-ss[i]);
}
return ans;
}
/*
void onepunchac168()
{
}
*/
// goodbye see ya
Compilation message
candies.cpp:1:1: warning: multi-line comment [-Wcomment]
1 | //------------------------------------\\
| ^
candies.cpp: In function 'std::vector<int> distribute_candies(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
candies.cpp:237:27: warning: 'ra' may be used uninitialized in this function [-Wmaybe-uninitialized]
237 | ans[i-1]=ss[i]-ra;
| ~~~~~^~~
candies.cpp:239:29: warning: 'la' may be used uninitialized in this function [-Wmaybe-uninitialized]
239 | else ans[i-1]=c[i-1]-(la-ss[i]);
candies.cpp:234:23: warning: 'res' may be used uninitialized in this function [-Wmaybe-uninitialized]
234 | ll hh=querysum(1,1,q,1,res-1);
| ~~~~~~~~^~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
12888 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1084 ms |
47664 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
6852 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
12888 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
12888 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |