Cod sursa(job #2039840)

Utilizator modulopaulModulopaul modulopaul Data 14 octombrie 2017 23:41:26
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <cstdio>
#define MAXN 100002

using namespace std;
FILE *fin=fopen("calcule.in","r"),*fout=fopen("calcule.out","w");
int n,k,sp,rest[MAXN]={0},finsub[MAXN]={0},nrsub=0;
long long nrdivk;
int bs(int x){
    int st=0,dr=nrsub,mij;
    while(st<dr){
        mij=(st+dr)/2;
        if(finsub[mij]>=x)
            st=mij+1;
        else
            dr=mij;
    }
    return st;
}
int main(){
    fscanf(fin,"%d%d",&n,&k);
    for(int i=1;i<=n;i++){
        int x,poz;
        fscanf(fin,"%d",&x);
        sp=(sp+x)%k;
        rest[sp]=(rest[sp]+1)%20011;
        poz=bs(x);
        finsub[poz]=x;
        if(nrsub==poz) nrsub++;
    }
    nrdivk=rest[0]*(rest[0]+1)/2%20011;
    for(int i=1;i<k;i++){
        nrdivk=(nrdivk+rest[i]*(rest[i]-1)/2)%20011;
    }
    fprintf(fout,"%d\n%d",nrsub,nrdivk);
    //cout<<nrdivk;
    return 0;
}