# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
24874 | evenharder | 역사적 조사 (JOI14_historical) | C++11 | 4000 ms | 15560 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <cstdio>
#include <set>
#include <map>
#include <vector>
#include <algorithm>
#include <utility>
#include <cmath>
#include <functional>
struct query{
int l,r,n;
long long int ans;
query(int l=0, int r=0, int n=0) : l(l), r(r), n(n) {ans=0LL;}
};
std::map<int, long long int> m; // amount
std::multiset<long long int, std::greater<long long int> > s;
std::vector<query> vq;
const int MAX_N=100000;
int x[MAX_N+1];
int n,q;
void calc()
{
int sq=(int)(ceil(sqrt(n+1)));
std::sort(vq.begin(), vq.end(), [&] (query A, query B) {
return A.l/sq == B.l/sq ? A.r < B.r : A.l < B.l;
});
int l=1;
int r=0;
for(int i=0;i<n;i++) s.insert(0);
for(int i=0;i<q;i++)
{
while(r<vq[i].r)
{
r++;
long long int prev = m[x[r]] * x[r];
auto it = s.find(prev);
s.erase(it);
m[x[r]]++;
s.insert(prev+x[r]);
}
while(r>vq[i].r)
{
long long int prev = m[x[r]] * x[r];
auto it = s.find(prev);
s.erase(it);
m[x[r]]--;
s.insert(prev-x[r]);
r--;
}
while(l<vq[i].l)
{
long long int prev = m[x[l]] * x[l];
auto it = s.find(prev);
s.erase(it);
m[x[l]]--;
s.insert(prev-x[l]);
l++;
}
while(l>vq[i].l)
{
l--;
long long int prev = m[x[l]] * x[l];
auto it = s.find(prev);
s.erase(it);
m[x[l]]++;
s.insert(prev+x[l]);
}
vq[i].ans=*s.begin();
}
std::sort(vq.begin(), vq.end(), [&] (query A, query B) {
return A.n < B.n;
});
for(int i=0;i<q;i++) printf("%lld\n", vq[i].ans);
}
int main()
{
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&x[i]);
}
for(int i=0;i<q;i++)
{
static int l,r;
scanf("%d%d",&l,&r);
vq.push_back(query(l,r,i));
}
calc();
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |