Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- #include<vector>
- #include<queue>
- #include<stack>
- #include<set>
- #include<list>
- #include<map>
- #include<sstream>
- #include<fstream>
- using namespace std ;
- struct nodes{
- int l,h,ans ;
- };
- nodes node[2*32000] ;
- int L ,X;
- void build(int n,int s,int e){
- if(s!=e){
- node[n].l = s ;
- node[n].h = e ;
- node[n].ans = 0 ;
- build(2*n,s,(s+e)/2) ;
- build(2*n+1,(s+e)/2+1,e) ;
- }
- }
- void update(int n){
- if(node[n].h>=X && node[n].l<=X) {
- node[n].ans++ ;
- // cout<<node[n].l<<" "<<node[n].h<<" "<<node[n].ans<<endl ;
- if(node[n].h!=X) {
- update(2*n) ;
- update(2*n+1) ;
- }
- }
- }
- void query(int n ){
- // cout<<node[n].l<<" "<<node[n].h<<" "<<node[n].ans<<endl ;
- if(node[n].h<=X) L+=node[n].ans ;
- else if(node[n].l<=X){
- query(2*n) ;
- query(2*n+1) ;
- }
- }
- int main() {
- //freopen("d:\\in.txt","r",stdin) ;
- int y ,n,i ;
- int level[15000+100] ;
- memset(level,0,sizeof(level)) ;
- build(1,0,32000) ;
- scanf("%d",&n) ;
- for(i=0;i<n;i++){
- L = 0 ;
- scanf("%d %d",&X,&y) ;
- query(1) ;
- level[L]++ ;
- update(1) ;
- }
- for(i=0;i<n;i++) cout<<level[i]<<endl ;
- return 0 ;
- }
Advertisement
Add Comment
Please, Sign In to add comment