Advertisement
Guest User

Untitled

a guest
Jun 18th, 2013
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. using namespace std;
  5. int T,K,Q,n,v[1001000],A,B,valmax;
  6. int lazy[5000100],val[5000100];
  7. vector <int> sol;
  8.  
  9. inline void Build(int nod,int st,int dr)
  10. {
  11.     if(st==dr)
  12.     {
  13.         val[nod]=v[st];
  14.         lazy[nod]=0;
  15.         return;
  16.     }
  17.     int mij=(st+dr)/2;
  18.     Build(2*nod,st,mij);
  19.     Build(2*nod+1,mij+1,dr);
  20.     val[nod]=max(val[2*nod],val[2*nod+1]);
  21.     lazy[nod]=0;
  22. }
  23.  
  24. inline void Update(int nod,int st,int dr)
  25. {
  26.     if(lazy[nod])
  27.     {
  28.         val[nod]+=lazy[nod];
  29.         if(st!=dr)
  30.         {
  31.             lazy[2*nod]+=lazy[nod];
  32.             lazy[2*nod+1]+=lazy[nod];
  33.         }
  34.         lazy[nod]=0;
  35.     }
  36.     if(A<=st && dr<=B)
  37.     {
  38.         val[nod]++;
  39.         if(st!=dr)
  40.         {
  41.             lazy[2*nod]++;
  42.             lazy[2*nod+1]++;
  43.         }
  44.         return;
  45.     }
  46.     int mij=(st+dr)/2;
  47.     if(A<=mij)
  48.         Update(2*nod,st,mij);
  49.     if(mij+1<=B)
  50.         Update(2*nod+1,mij+1,dr);
  51.     val[nod]=max(val[2*nod],val[2*nod+1]);
  52. }
  53.  
  54. inline void Query(int nod,int st,int dr)
  55. {
  56.     if(lazy[nod])
  57.     {
  58.         val[nod]+=lazy[nod];
  59.         if(st!=dr)
  60.         {
  61.             lazy[2*nod]+=lazy[nod];
  62.             lazy[2*nod+1]+=lazy[nod];
  63.         }
  64.         lazy[nod]=0;
  65.     }
  66.     if(A<=st && dr<=B)
  67.     {
  68.         valmax=max(valmax,val[nod]);
  69.         return;
  70.     }
  71.     int mij=(st+dr)/2;
  72.     if(A<=mij)
  73.         Query(2*nod,st,mij);
  74.     if(mij+1<=B)
  75.         Query(2*nod+1,mij+1,dr);
  76. }
  77.  
  78. int main()
  79. {
  80.     int t,i;
  81.     vector <int>::iterator it;
  82.     n=1000100;
  83.     scanf("%d",&T);
  84.     for(t=1;t<=T;t++)
  85.     {
  86.         scanf("%d %d",&K,&Q);
  87.         for(i=1;i<=n;i++)
  88.             v[i]=0;
  89.         Build(1,1,n);
  90.         for(i=1;i<=Q;i++)
  91.         {
  92.             scanf("%d %d",&A,&B);
  93.             B--;
  94.             valmax=0;
  95.             Query(1,1,n);
  96.             if(valmax<K)
  97.             {
  98.                 sol.push_back(i);
  99.                 Update(1,1,n);
  100.             }
  101.         }
  102.         printf("Case %d:\n",t);
  103.         for(it=sol.begin();it!=sol.end();it++)
  104.             printf("%d ",*it);
  105.         printf("\n");
  106.         sol.clear();
  107.     }
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement