Cod sursa(job #3353887)

Utilizator mrvalentynTime Limit Exceeded mrvalentyn Data 12 mai 2026 13:14:18
Problema Secventa 5 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
/*  
    * author: qvalentin  
    * https://codeforces.com/profile/qvalentin
    * 
    * It's you, it'll always be you *
    
*/

#include <bits/stdc++.h>  
using namespace std;  
#define ull unsigned long long  
#define ll long long  
#define pb push_back  
#define fastio ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); 
const int MOD = 1e9+7;
int di[4]={0,0,-1,1};  
int dj[4]={-1,1,0,0};  
      
string FILENAME="secv5";  
ifstream f(FILENAME+".in");  
ofstream g(FILENAME+".out");  

int n,l,u;
int frq[1337337];


//cate subsecv au k elemente diff
ll cnt(vector<int>& v, int k){
        
        for(int i=1;i<=n;++i)frq[i] = 0;

        ll ans = 0;

        int st = 1;
        int dist = 0;
        //two poiinters
        for(int dr = 1; dr <= n; ++dr){
                if(frq[v[dr]] == 0)dist++;
                frq[v[dr]]++;
                
                while(dist > k) {
                        frq[v[st]]--;
                        if(frq[v[st]] == 0) dist--;
                        st++;
                }

                ans += (ll)(dr-st+1); //adaug toate subscv
                
        }
        return ans;
}


signed main(){  
        fastio

        #ifndef qv
                #define cin f
                #define cout g
        #endif

        
        cin>>n>>l>>u;
        
        vector<pair<ll,int> > v(n+1);
        for(int i=1;i<=n;++i){
                int x;
                cin>>x;
                v[i] = {x,i};
        }

        sort(v.begin(),v.end());

        vector<int> idxs(n+1);

        int tmp = 1;
        for(int i=1;i<=n;++i){
                if(i>1 && v[i].first != v[i-1].first) {
                        tmp++;
                }
                idxs[v[i].second]=tmp;
                
        }
        
        cout<<cnt(idxs,u)-cnt(idxs,l-1);


        return 0;

}