Submission #1350403

#TimeUsernameProblemLanguageResultExecution timeMemory
1350403kokoxuyaWerewolf (IOI18_werewolf)C++20
Compilation error
0 ms0 KiB
#include "werewolf.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define mp make_pair
#define lsb(x) (x&(-x))
#define pii pair<int,int>
#define ss second
#define ff first
#define piii pair<int,pii>
#define debu(x) (cerr << #x  << " = "<< x << "\n")
#define debu2(x,y) (cerr << #x  << " = "<< x << " " << #y << " = " << y << "\n")
#define debu3(x,y,z) (cerr << #x  << " = "<< x << " " << #y << " = " << y << " " << #z << " = " << z<< "\n")
#define bitout(x,y) {\
	cerr << #x << " : ";\
	for (int justforbits = y; justforbits >=0; justforbits--)cout << (((1 << justforbits) & x)>=1);\
	cout << "\n";\
}
#define rangeout(j,rangestart,rangeend) {\
	cerr << "outputting " << #j<< ":\n";\
	for (int forrang = rangestart; forrang <= rangeend; forrang++)cerr << j[forrang] << " ";\
	cerr<<"\n";\
}
#define c1 {cerr << "Checkpoint 1! \n\n";cerr.flush();}
#define c2 {cerr << "Checkpoint 2! \n\n";cerr.flush();}
#define c3 {cerr << "Checkpoint 3! \n\n";cerr.flush();}
#define c4 {cerr << "Checkpoint 4! \n\n";cerr.flush();}
#define pipi pair<pii,pii>

void dfs(int cn, int num, vector<pii>&nummys, vector<int>&corr, vector<bool>&visited)
{
	visited[cn]=true;
	nummys.pb(mp(cn,num));
	corr[cn]=num;num++;
	for(int to:adjlist[cn])
	{
		if(visited[to])continue;
		dfs(to,num,nummys,corr,visited);
	}
}

vector<int> check_validity(int N,vector<int> X, vector<int> Y,vector<int> S,vector<int> E,vector<int> L, vector<int> R) 
{
	int n=N,m=X.size(),q=S.size();
	
	vector<int>corr(n);
	vector<vector<int>>adjlist(n);
	
	for(int a=0;a<m;a++)
	{
		adjlist[X[a]].pb(Y[a]);
		adjlist[Y[a]].pb(X[a]);
	}
	int star;
	for(int a=0;a<n;a++){if(adjlist[a].size()==1)star=a;}
	
	vector<bool>visited(n,false);
	vector<pii>nummys;
	dfs(star,1,nummys,corr,visited);
	sort(nummys.begin(),nummys.end(),greater<pii>());
	
	for(int i=0;i<q;i++)
	{
		S[i]=corr[S[i]];
		E[i]=corr[E[i]];
		if(S[i]>E[i])swap(S[i],E[i]);
	}
	
	priority_queue<pii>ls;
	priority_queue<pii,vector<pii>,greater<pii>>rs;
	for(int i=0;i<q;i++)
	{
		ls.push(mp(L[i],i));
		rs.push(mp(R[i],i));
	}
	
	vector<pipi>urans(q);
	for(int i=0;i<2;i++)
	{
		set<pii>ranges;
		for(pii curr:nummys)
		{
			int cn=curr.ss;
			ranges.insert(mp(cn,cn));
			auto x=ranges.find(mp(cn,cn));
			
			auto y=ranges.end(),z=ranges.end();
			if(x!=ranges.begin()){y=prev(x);}
			if(x!=ranges.end()){z=next(x);}
			
			if(y!=ranges.end())
			{
				if((*y).ss==cn-1)
				{
					pii t1=*next(y),t2=*y;
					ranges.erase(next(y));ranges.erase(y);
					ranges.insert(mp(t2.ff,t1.ss));
				}
			}
			if(z!=ranges.end())
			{
				if((*z).ff==cn+1)
				{
					pii t1=*prev(z),t2=*z;
					ranges.erase(prev(z));ranges.erase(z);
					ranges.insert(mp(t1.ff,t2.ss));
				}
			}
			
			if(i)
			{
				while(!rs.empty()&&rs.top().ff==curr.ff)
				{
					int qno=rs.top().ss;
					int k=s[qno],kk=e[qno];
					ls.pop();
					
					auto j=ranges.upper_bound(mp(k+1,0));
					if(j==ranges.begin()||(*prev(j)).ss<k){urans[qno].ff.ss=-1;}
					else
					{
						urans[qno].ff.ss=(*(prev(j))).ss;
					}
					auto j=ranges.upper_bound(mp(kk+1,0));
					if(j==ranges.begin()||(*prev(j)).ss<kk){urans[qno].ss.ss=-1;}
					else
					{
						urans[qno].ss.ss=(*(prev(j))).ff;
					}
				}				
			}
			else
			{
				while(!ls.empty()&&ls.top().ff==curr.ff)
				{
					int qno=ls.top().ss;
					int k=s[qno],kk=e[qno];
					ls.pop();
					
					auto j=ranges.upper_bound(mp(k+1,0));
					if(j==ranges.begin()||(*prev(j)).ss<k){urans[qno].ff.ff=-1;}
					else
					{
						urans[qno].ff.ff=(*(prev(j))).ss;
					}
					auto j=ranges.upper_bound(mp(kk+1,0));
					if(j==ranges.begin()||(*prev(j)).ss<kk){urans[qno].ss.ff=-1;}
					else
					{
						urans[qno].ss.ff=(*(prev(j))).ff;
					}
				}
			}
		}
		
		reverse(nummys.begin(),nummys.end());
	}
	
	vector<int>ans;
	for(int i=0;i<q;i++)
	{
		bool troo=false;
		pii f1=urans[i],f2=urans[i];
		if(f1.ff!=-1&&(f2.ss!=-1&&f1.ff>=f2.ss))troo=true;
		if(f1.ss!=-1&&(f2.ff!=-1&&f1.ff>=f2.ss))troo=true;
		ans.pb(troo);
	}
	return ans;
}

Compilation message (stderr)

werewolf.cpp: In function 'void dfs(long long int, long long int, std::vector<std::pair<long long int, long long int> >&, std::vector<long long int>&, std::vector<bool>&)':
werewolf.cpp:36:20: error: 'adjlist' was not declared in this scope
   36 |         for(int to:adjlist[cn])
      |                    ^~~~~~~
werewolf.cpp: In function 'std::vector<long long int> check_validity(long long int, std::vector<long long int>, std::vector<long long int>, std::vector<long long int>, std::vector<long long int>, std::vector<long long int>, std::vector<long long int>)':
werewolf.cpp:116:47: error: 's' was not declared in this scope
  116 |                                         int k=s[qno],kk=e[qno];
      |                                               ^
werewolf.cpp:125:46: error: conflicting declaration 'auto j'
  125 |                                         auto j=ranges.upper_bound(mp(kk+1,0));
      |                                              ^
werewolf.cpp:119:46: note: previous declaration as 'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> > j'
  119 |                                         auto j=ranges.upper_bound(mp(k+1,0));
      |                                              ^
werewolf.cpp:125:70: error: 'kk' was not declared in this scope; did you mean 'k'?
  125 |                                         auto j=ranges.upper_bound(mp(kk+1,0));
      |                                                                      ^~
      |                                                                      k
werewolf.cpp:138:47: error: 's' was not declared in this scope
  138 |                                         int k=s[qno],kk=e[qno];
      |                                               ^
werewolf.cpp:147:46: error: conflicting declaration 'auto j'
  147 |                                         auto j=ranges.upper_bound(mp(kk+1,0));
      |                                              ^
werewolf.cpp:141:46: note: previous declaration as 'std::_Rb_tree_const_iterator<std::pair<long long int, long long int> > j'
  141 |                                         auto j=ranges.upper_bound(mp(k+1,0));
      |                                              ^
werewolf.cpp:147:70: error: 'kk' was not declared in this scope; did you mean 'k'?
  147 |                                         auto j=ranges.upper_bound(mp(kk+1,0));
      |                                                                      ^~
      |                                                                      k
werewolf.cpp:164:31: error: conversion from 'pair<std::pair<long long int, long long int>,std::pair<long long int, long long int>>' to non-scalar type 'pair<long long int,long long int>' requested
  164 |                 pii f1=urans[i],f2=urans[i];
      |                               ^
werewolf.cpp:164:43: error: conversion from 'pair<std::pair<long long int, long long int>,std::pair<long long int, long long int>>' to non-scalar type 'pair<long long int,long long int>' requested
  164 |                 pii f1=urans[i],f2=urans[i];
      |                                           ^