poj 2886

2014-11-23 20:00:45 · 作者: · 浏览: 14
#include 
#include 
#include 
using namespace std;
const int maxn=5e5+9;
int ans[maxn],tr[maxn];
char name[maxn][15];
int a[maxn];
int cnt[maxn];
bool is[maxn];
int n,k;
void add(int x,int tmp)
{
    for(int i=x;i<=n;i+=(i&-i))
    tr[i]+=tmp;
}
int getsum(int x)
{
    int ret=0;
    for(int i=x;i>=1;i-=(i&-i))
    ret+=tr[i];
    return ret;
}
int main()
{
//    freopen("in.txt","r",stdin);
    while(scanf("%d %d",&n,&k)!=EOF)
    {
        memset(is,0,sizeof(is));
        memset(tr,0,sizeof(tr));
        for(int i=1;i<=n;i++)
        add(i,1);
        add(k,-1);
        ans[1]=k;
        is[k]=1;
        for(int i=1;i<=n;i++)
        {
            scanf("%s",&name[i][1]);
            scanf("%d",&a[i]);
        }
//        cout<0)
            {
                a[tmp]+=getsum(tmp);
                a[tmp]%=(n-i+1);
                if(a[tmp]==0) a[tmp]=n-i+1;
                int st=1,ed=n,mid;
                while(st>1;
                    if(getsum(mid)
>1; if(n-i+1-getsum(mid)sum) { sum=cnt[i]; tmp=i; } printf("%s %d\n",&name[ans[tmp]][1],sum); } return 0; }