結果
| 問題 | No.743 Segments on a Polygon |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-12-21 20:47:15 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 138 ms / 2,000 ms |
| コード長 | 1,040 bytes |
| 記録 | |
| コンパイル時間 | 1,802 ms |
| コンパイル使用メモリ | 198,948 KB |
| 実行使用メモリ | 9,036 KB |
| 最終ジャッジ日時 | 2025-12-21 20:47:20 |
| 合計ジャッジ時間 | 3,800 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
int n,m,a[N],b[N],id[N];
bool cmp(int x,int y){
return a[x]<a[y];
}
int c[N];
inline int l(int x){
return x&(-x);
}
inline void add(int x){
while(x<=m){
c[x]++;
x+=l(x);
}
return;
}
inline int ask(int x){
int res=0;
while(x){
res+=c[x];
x-=l(x);
}
return res;
}
signed main(){
//freopen("intersection.in","r",stdin);
//freopen("intersection.out","w",stdout);
cin>>n>>m;
int ans=n*(n-1)/2;
for(int i=1;i<=n;i++){
int x,y;cin>>x>>y;++x;++y;
if(x>y) swap(x,y);
a[i]=x;b[i]=y;
id[i]=i;
}
sort(id+1,id+1+n,cmp);
for(int o=1;o<=n;o++){
int i=id[o];
ans-=(o-1-ask(b[i]));
add(b[i]);
}
sort(a+1,a+1+n);
sort(b+1,b+1+n);b[0]=-1;
int l=1,r=0;
while(l<=n){
while(r<=n&&b[r]<a[l]) r++;
r--;
ans-=r;
l++;
}
cout<<ans<<'\n';
return 0;
}