首先询问i相当于询问a[j]>=a[i],b[j]>=b[i]的j

如果b[j]==b[i],那么a[j]>a[i],这种情况先用set处理掉

如果b[j]>b[i],那么a[j]>=a[i],离散化后CDQ分治,用树状数组记录前缀最大值即可

时间复杂度$O(n\log^2n)$

#include<cstdio>
#include<set>
#include<algorithm>
#define N 200010
using namespace std;
typedef pair<int,int> PI;
int n,q,cnt,i,j,x,y,t1,t2,bit[N],pos[N],T,ans[N],L[N];
char op;
set<PI>Set[N];
set<PI>::iterator it;
struct P{int x,y,id;P(){}P(int _x,int _y,int _id){x=_x,y=_y,id=_id;}}a[N],b[N],c[N],stu[N];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline int lower(int x){
int l=1,r=cnt,t,mid;
while(l<=r)if(L[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
return t;
}
inline bool cmp(P a,P b){return a.x>b.x;}
inline int merge(int x,int y){
if(!x)return y;
if(!y)return x;
if(stu[x].y==stu[y].y)return stu[x].x<stu[y].x?x:y;
return stu[x].y<stu[y].y?x:y;
}
inline void add(int x,int y){for(;x<=n;x+=x&-x)if(pos[x]<T)pos[x]=T,bit[x]=y;else bit[x]=merge(bit[x],y);}
inline int ask(int x){int t=0;for(;x;x-=x&-x)if(pos[x]==T)t=merge(t,bit[x]);return t;}
void solve(int l,int r){
if(l==r)return;
int mid=(l+r)>>1;
solve(l,mid),solve(mid+1,r);
for(t1=0,i=l;i<=mid;i++)if(a[i].id<0)b[t1++]=a[i];
for(t2=0,i=r;i>mid;i--)if(a[i].id>0)c[t2++]=a[i];
if(!t2)return;
sort(b,b+t1,cmp),sort(c,c+t2,cmp);
for(T++,i=j=0;i<t2;i++){
while(j<t1&&b[j].x>=c[i].x)add(b[j].y,-b[j].id),j++;
ans[c[i].id]=merge(ans[c[i].id],ask(c[i].y-1));
}
}
int main(){
read(n);
for(i=1;i<=n;i++){
while(!(((op=getchar())=='D')||(op=='P')));
read(x);
if(op=='D')read(y),L[++cnt]=y,stu[cnt]=a[i]=P(x,y,-cnt);else a[i]=stu[x],a[i].id=++q;
}
sort(L+1,L+cnt+1);
for(i=1;i<=n;i++){
a[i].y=cnt-lower(a[i].y)+1;
if(a[i].id<0)Set[a[i].y].insert(PI(a[i].x,-a[i].id));
else{
it=Set[a[i].y].lower_bound(PI(a[i].x+1,0));
if(it!=Set[a[i].y].end())ans[a[i].id]=it->second;
}
}
solve(1,n);
for(i=1;i<=q;i++)if(!ans[i])puts("NE");else printf("%d\n",ans[i]);
return 0;
}

  

BZOJ2773 : ispiti的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. HTTP HSTS协议和 nginx

    导读 Netcraft 公司最近公布了他们检测SSL/TLS网站的研究,并指出只有仅仅5%的用户正确执行了HTTP严格传输安全HSTS.本文介绍nginx如何配置HSTS. 什么是HSTS HTTPS ...

  2. Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression

    原文:http://blog.csdn.net/abcjennifer/article/details/7732417 本文为Maching Learning 栏目补充内容,为上几章中所提到单参数线性 ...

  3. HDU 2895 编辑距离

    #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> ...

  4. 利用nginx泛域名解析配置二级域名和多域名

    利用nginx泛域名解析配置二级域名和多域名 网站的目录结构为 html ├── bbs └── www html为nginx的安装目录下默认的存放源代码的路径. bbs为论坛程序源代码路径 www为 ...

  5. 通过JS语句判断WEB网站的访问端是电脑还是手机

    通过JS语句判断WEB网站的访问端是电脑还是手机,以显示不同的页面! 目录腾讯网的适配代码如何判断访问网站的机器类型-如何判断ipadJS 判断浏览器客户端类型(ipad,iphone,android ...

  6. python模拟浏览器保存Cookie进行会话

    #! /usr/bin/env python # -*-coding:utf- -*- import urllib import urllib2 import cookielib class NetR ...

  7. html span标签 不换行(有时span带中文时候是可以自动换行的)

    <span>你好111111111111111111111111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ...

  8. FileOutputStream与FileInputStream互相转换

    List<InstorageNoticeDto> noticeList = null; FileOutputStream fos = null; FileInputStream is = ...

  9. ini 文件操作记要(1): 使用 TIniFile

    ini 文件操作记要(1): 使用 TIniFile unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Class ...

  10. Java for LeetCode 072 Edit Distance【HARD】

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...