Submission #686745

#TimeUsernameProblemLanguageResultExecution timeMemory
686745qweasdzxc역사적 조사 (JOI14_historical)C++14
100 / 100
1327 ms9736 KiB
#include <bits/stdc++.h>
#define fastio                    \
	ios_base::sync_with_stdio(0); \
	cin.tie(0);
#define vi vector<int>
#define vl vector<long long>
#define vc vector<char>
#define vs vector<string>
#define pi pair<int, int>
#define pl pair<ll, ll>
#define vp vector<pi>
#define vpl vector<pl>
#define ll long long
#define MAX 2147000000
#define MOD 1000000007
using namespace std;

struct st{
    int l, r, idx;
};

int n, q;
const int sz = 1e5 + 10;
vector<st> query(sz);
vi A;

vl maxSeg(sz * 4);
vi vec;

void update(ll p, ll val)
{
    for(maxSeg[p+=n]+=val;p>1;p>>=1) maxSeg[p>>1] = max(maxSeg[p], maxSeg[p^1]);
}

void Plus(int k){
    update(k, A[k]);
}

void Minus(int k){
    update(k, -A[k]);
}


int main() {
	fastio;	
    cin >> n >> q;
    vec.resize(n);
    for(int i{0}; i < n; ++i){
        cin >> vec[i];
    }
    A = vec;
    sort(A.begin(), A.end());
    A.erase(unique(A.begin(), A.end()), A.end());
    for(int i{0}; i < n; ++i){
        vec[i] = lower_bound(A.begin(), A.end(), vec[i]) - A.begin();
    }
    for(int i{0}; i < q; ++i){
        cin >> query[i].l >> query[i].r;
        query[i].l--; query[i].r--;
        query[i].idx = i;
    }
    int sq = sqrt(n);
    sort(query.begin(), query.begin() + q, [&](st& a, st& b){
        if(a.l / sq == b.l / sq) return a.r < b.r;
        else return a.l / sq < b.l / sq;
    });
    int l = query[0].l;
    int r = query[0].r;
    vl ans(q);
    for(int i{l}; i <= r; ++i){
        Plus(vec[i]);
    }
    ans[query[0].idx] = maxSeg[1];
    for(int i{1}; i < q; ++i){
        while(l > query[i].l) Plus(vec[--l]);
        while(r < query[i].r) Plus(vec[++r]);
        while(l < query[i].l) Minus(vec[l++]);        
        while(r > query[i].r) Minus(vec[r--]);
        ans[query[i].idx] = maxSeg[1];
    }
    for(auto& i : ans) cout << i << "\n";
}
	
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...