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 <bits/stdc++.h>
#define int long long
#define chmin(x, v) x = min(x, v)
#define chmax(x, v) x = max(x, v)
#define all(v) v.begin(), v.end()
using namespace std;
const int MOD = 1e9 + 7, N = 2e5;
set<int> pasVisites;
int nInters(int len){
return ((len * (len + 1))/2)%MOD;
}
int subSum(int n){
return ((n * (n+1))/2)%MOD;
}
struct Zone {
int hauteur, largeur, ind;
bool operator < (const Zone &autre) const {
if (hauteur != autre.hauteur) return hauteur > autre.hauteur;
return largeur < autre.largeur;
}
};
signed main(){
int nZones; cin >> nZones;
vector<int> hauteurs(nZones), largeurs(nZones);
for (int& hauteur : hauteurs) cin >> hauteur;
for (int& largeur : largeurs) cin >> largeur;
vector<Zone> zones, pastriees;
for (int i = 0; i < nZones; ++i){
if (zones.size() == 0 || zones[zones.size() - 1].hauteur != hauteurs[i])
zones.push_back({hauteurs[i], 0, (int)zones.size()});
zones[zones.size() - 1].largeur = (zones[zones.size() - 1].largeur + largeurs[i])%MOD;
}
vector<int> cumul(zones.size());
for (int i = 0; i < (int)zones.size(); ++i){
cumul[i] = zones[i].largeur;
if (i != 0)
cumul[i] = (cumul[i] + cumul[i - 1])%MOD;
pasVisites.insert(i);
}
pastriees = zones;
sort(all(zones));
int sum = 0;
for (Zone& zone : zones){
pasVisites.erase(zone.ind);
auto it = pasVisites.upper_bound(zone.ind);
int gauche = -1, droite = zones.size() - 1;
if (it != pasVisites.end()) droite = *it - 1;
if (it != pasVisites.begin()){
it--;
gauche = *it;
}
int len = cumul[droite];
if (gauche != -1) len -= cumul[gauche];
len = (len + MOD)%MOD;
/* Trouver la hauteur */
int maxi = 0;
if (gauche != -1) chmax(maxi, pastriees[gauche].hauteur);
if (droite + 1 < (int)zones.size())chmax(maxi, pastriees[droite + 1].hauteur);
int s = subSum(zone.hauteur) - subSum(maxi);
sum = (sum + nInters(len) * (s))%MOD;
}
cout << sum << endl;
return 0;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |