Pagini recente » Cod sursa (job #3179111) | Cod sursa (job #1287756) | Cod sursa (job #1819471) | Cod sursa (job #549793) | Cod sursa (job #494337)
Cod sursa(job #494337)
#include<fstream>
#include<vector>
using namespace std;
ifstream f("divk.in");
ofstream g("divk.out");
const int K=1<<17;
vector<int> x[K];
int m,v[1<<19];
int cautbin1(int t)
{
int i, pas=1<<18;
for(i=0; pas; pas>>=1)
if(i+pas<=m && v[i+pas]<t)
i+=pas;
return 1+i;
}
int cautbin2(int t)
{
int i, pas=1<<18;
for(i=0; pas; pas>>=1)
if(i+pas<=m && v[i+pas]<=t)
i+=pas;
return i;
}
int p,n,s=0,k,a,b,i,j;
int main()
{
int p1,p2,rez=0;
f>>n>>k>>a>>b;
x[0].push_back(0);
//x[0][0]=0;
for(i=1;i<=n;++i)
{
f>>p;
s=(s+p)%k;
x[s].push_back(i);
}
for(i=0; i<k;++i)
{
for(j=0; j<x[i].size();++j)
v[j+1] = x[i][j];
m = x[i].size();
for(j=0; j<x[i].size();++j)
{
/*
if(x[i][j]-b < 0)
p1 = 1;
else
p1 = cautbin1(x[i][j] - b,i);
*/
p1 = cautbin1(x[i][j] - b);
p2 = cautbin2(x[i][j] - a);
//g<<"i = "<<i<<" caut "<<x[i][j]<<" si obtin "<<p1<<" "<<p2<<"\n";
rez += p2 - p1 + 1;
}
}
g<<rez;
return 0;
}