codeforces的题目,不知为啥总是过不了。
codeforces吧
全部回复
仅看楼主
level 1
niceSY12 楼主
#include<stdio.h>
int max(int a,int b)
{
return(a>b?a:b);
}
struct tree
{
int l,r;
int max;
int maxpos;
} x[2000000];
void build(int l,int r,int k )
{
if(l==r)
{
x[k].l=l;x[k].r=r;x[k].max=0;x[k].maxpos=k;return;
}
x[k].r=r;x[k].l=l;
int mid=(l+r)/2;
build(l,mid,2*k);
build(mid+1,r,2*k+1);
}
void insert(int pos,int n,int k)
{
if(x[k].r==x[k].l&&x[k].l==pos) {x[k].max+=n;return;}
int mid=(x[k].l+x[k].r)/2;
if(pos<=mid) insert(pos,n,2*k);
else if(pos>mid) insert(pos,n,2*k+1);
if(x[2*k].max>=x[2*k+1].max)
{
x[k].max=x[2*k].max;
x[k].maxpos=x[2*k].maxpos;
}
else if(x[2*k].max<x[2*k+1].max)
{
x[k].max=x[2*k+1].max;
x[k].maxpos=x[2*k+1].maxpos;
}
}
int main()
{
int cae;
scanf("%d",&cae);
while(cae--)
{
int n,q,po[200000][2];
scanf("%d%d",&n,&q);
int i,j;
build(1,n,1);
for(i=1;i<=q;i++)
{
int x,p;
scanf("%d%d",&x,&p);
insert(x,p,1);
po[i][0]=x;po[i][1]=p;
}
//printf("%d %d %d\n",x[1].max,x[x[1].maxpos].l,x[x[1].maxpos].r);
int mmax=x[1].max;
int pos=x[x[1].maxpos].l;
for(i=q;i>=1;i--)
{
insert(po[i][0],-po[i][1],1);
if(x[x[1].maxpos].l!=pos) break;
} // printf("%d\n",i);
printf("%d\n",i);
}
}
2017年08月07日 01点08分 1
1