Pagini recente » Cod sursa (job #357720) | Cod sursa (job #2839907) | Cod sursa (job #1753779) | Cod sursa (job #1944973) | Cod sursa (job #2379809)
#include <bits/stdc++.h>
using namespace std;
ifstream f("triplete.in");
ofstream g("triplete.out");
struct vaci{
int a,b;
}v[140000];
short pp[4100],pu[4100];
int nrt;
bool cond(vaci A, vaci B){
if(A.a!=B.a)
return A.a<B.a;
return A.b<B.b;
}
bool caubin(int j, int i){
int st=pp[v[j].b],dr=pu[v[j].b],m;
while(st<=dr){
m=(st+dr)/2;
if(v[m].b==v[i].a)
return 1;
else if(v[m].b<v[i].a)
st=m+1;
else dr=m-1;
}
return 0;
}
int main()
{
int n,m,lv=0,i,j;
f>>n>>m;
for(i=1;i<=m;++i){
++lv;
f>>v[lv].a>>v[lv].b;
++lv;
v[lv].a=v[lv-1].b;
v[lv].b=v[lv-1].a;
}
sort(v+1,v+lv+1,cond);
int u=1;
for(i=1;i<=lv;++i){
if(v[i].a==u && pp[u]==0){
pp[u]=i;
}
if(v[i+1].a!=u){
pu[u]=i;
++u;
}
}
for(i=1;i<=lv;++i){
if(v[i].a>v[i].b)
continue;
for(j=pp[v[i].b];j<=pu[v[i].b];++j){
if(v[j].a>v[j].b)
continue;
if(caubin(j,i)){
++nrt;
}
}
}
g<<nrt;
return 0;
}