fork(1) download
  1. #include<bits/stdc++.h>
  2. #define F first
  3. #define S second
  4. using namespace std;
  5. int const N=1<<19, poc=1<<18;
  6. pair<int,int>tree[N];
  7.  
  8. void update(int v){
  9. swap(tree[v].F,tree[v].S);
  10. v/=2;
  11. while(v>0){
  12. tree[v].F=tree[2*v+1].F;
  13. tree[v].S=tree[2*v].S;
  14. if(tree[2*v].F>=tree[2*v+1].S) tree[v].F+=tree[2*v].F-tree[2*v+1].S;
  15. else tree[v].S+=tree[2*v+1].S-tree[2*v].F;
  16. v/=2;
  17. }
  18. }
  19.  
  20. int main(){
  21. ios_base::sync_with_stdio(0);
  22. cin.tie(0);
  23. cout.tie(0);
  24. int n,a;
  25. cin>>n;
  26. for(int i=1;i<=n;i++){
  27. cin>>a;
  28. if(a==-1) tree[i+poc].F++;
  29. else tree[i+poc].S++;
  30. }
  31. for(int i=1;i<=n;i++){
  32. update(i+poc);
  33. }
  34. while(true){
  35. cin>>a;
  36. if(a==-1) return 0;
  37. if(a==0){
  38. if(tree[1].F==0&tree[1].S==0) cout<<"TAK\n";
  39. else cout<<"NIE\n";
  40. }
  41. else update(a+poc);
  42. }
  43.  
  44. }
Success #stdin #stdout 0s 5600KB
stdin
8
1 1 -1 1 1 -1 -1 -1
0
2
0
7
0
3
0
5
0
-1
stdout
TAK
NIE
NIE
NIE
TAK