Pagini recente » Cod sursa (job #846718) | Cod sursa (job #1729309) | Cod sursa (job #566196) | Cod sursa (job #779109) | Cod sursa (job #3344775)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("distincte.in");
ofstream cout("distincte.out");
using ll= long long;
const int dim= 1e5+ 5;
int v[dim], poz[dim];
struct ura{
int st, dr, poz;
}inter[dim];
ll rez[dim];
bool cmp(ura a, ura b){
return ((a.dr < b.dr) or (a.dr== b.dr and a.st < b.st));
}
ll suma= 0;
void adauga(int l, int r){
//cout <<"Adaug: "<< l<<" "<< r<< endl;
for(int i= l;i <= r;i++){
if(poz[v[i]]== 0)poz[v[i]]= i, suma+= v[i];//, cout <<"+ "<< v[i]<<" ";
else{
if(poz[v[i]] < i)poz[v[i]]= i;
}
}
//cout << endl;
}
void sterge(int l, int r){
//cout <<"scad: "<< l<<" "<< r<< endl;
for(int i= l;i <= r;i++){
if(poz[v[i]]== i){
suma-= v[i];
poz[v[i]]= 0;
//cout <<"- "<< v[i]<<" ";
}
}
//cout << endl;
}
int main()
{
int n, k, m, i, j, l, r;
cin >> n>> k>> m;
for(i= 1;i <= n;i++){
cin >> v[i];
}
for(i= 1;i <= m;i++){
cin >> inter[i].st>> inter[i].dr;
inter[i].poz= i;
}
sort(inter+ 1, inter+ 1+ m, cmp);
l= r= 0;
for(i= 1;i <= m;i++){
//cout << l<<" "<< r<<" si "<< inter[i].st<<" "<< inter[i].dr<< endl;
if(r < inter[i].st){
sterge(l, r);
adauga(inter[i].st, inter[i].dr);
}
else
if(l < inter[i].st){
sterge(l, inter[i].st- 1);
adauga(r+ 1, inter[i].dr);
}
else{
adauga(inter[i].st, l- 1);
adauga(r+ 1, inter[i].dr);
}
l= inter[i].st;
r= inter[i].dr;
rez[inter[i].poz]= suma;
//cout << endl<< endl;
}
for(i= 1;i <= m;i++)
cout << rez[i]<< '\n';
return 0;
}