Submission #284501

#TimeUsernameProblemLanguageResultExecution timeMemory
284501nvmdavaTeams (IOI15_teams)C++17
Compilation error
0 ms0 KiB
#include "teams.h"
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second

const int N = 500005;

struct Node{
	int s;
	Node *L, *R;
	Node(int _s, Node *_L, Node *_R){
		s = _s; L = _L; R = _R;
	}
 
	int query(int l, int r, int le, int ri){
		if(le > r || ri < l) return 0;
		if(le <= l && r <= ri) return s;
		int m = (l + r) >> 1;
		return L -> query(l, m, le, ri) + R -> query(m + 1, r, le, ri);
	}
 
	Node* update(int l, int r, int x){
		if(l > x || r < x) return this;
		if(l == r) return new Node(s + 1, L, R);
		int m = (l + r) >> 1;
		return new Node(s + 1, L -> update(l, m, x), R -> update(m + 1, r, x));
	}
 
	void build(int l, int r){
		if(l == r) return;
		int m = (l + r) >> 1;
		L = new Node(0, NULL, NULL);
		R = new Node(0, NULL, NULL);
		L -> build(l, m);
		R -> build(m + 1, r);
	}
};
 
vector<int> lol[N];
 
Node* tree[N];
 
int query(int x1, int y1, int x2, int y2){
	--y1;
	return tree[y2] -> query(1, N, x1, x2) - tree[y1] -> query(1, N, x1, x2);
}
 
void init(int n, int A[], int B[]) {
	for(int i = 0; i < n; ++i)
		lol[B[i]].push_back(A[i]);
	tree[0] = new Node(0, NULL, NULL);
	tree[0] -> build(1, N);
	for(int i = 1; i < N; ++i){
		tree[i] = tree[i - 1];
		for(auto& x : lol[i]){
			tree[i] = tree[i] -> update(1, N, x);
		}
	}
}

vector<pair<int, int> > val;
vector<pair<int, pair<int, int> > > kill;

int can(int M, int K[]) {
	sort(K + 0, K + M);
	val.clear();
	for(int i = 0; i < M; ++i){
		if(val.empty() || val.back().ff != K[i])
			val.push_back({K[i], 0});
		val.back().ss += K[i];
		if(val.back().ss > N) return 0;
	}

	M = val.size();
	val.push_back({N, 0});
	kill = {{1, {M, 0}}};
	for(int i = 0; i < M; ++i){
		while(kill.back().ss.ff < i)
			kill.pop_back();
		while(kill.back().ss.ff == i){
			val[i].ss += kill.back().ss.ss;
			kill.pop_back();
			if(val[i].ss > N) return 0; 
		}
		int s, br = i;
		while((s = query(kill.back().ff, val[br].ff, val[i].ff, val[kill.back().ss.ff].ff - 1)) <= val[i].ss){
			val[i].ss -= s;
			br = kill.back().ss.ff;
			val[i].ss += kill.back().ss.ss;
			kill.pop_back();
			if(kill.empty()){
				if(i == M - 1 && val[i].ss == 0)
					return 1;
				return 0;
			}
		}

		for(int j = 20; j >= 0; --j){
			if(br + (1 << j) <= kill.back().ss.ff && (s = query(kill.back().ff, val[br].ff, val[i].ff, val[br + (1 << j)].ff - 1)) <= val[i].ss){
				val[i].ss -= s;
				br += 1 << j;
			}
		}
		kill.push_back({val[i].ff + 1, {br, val[i].ss}});
	}

	return 1;
}

Compilation message (stderr)

teams.cpp:63:37: error: 'std::vector<std::pair<int, std::pair<int, int> > > kill' redeclared as different kind of entity
   63 | vector<pair<int, pair<int, int> > > kill;
      |                                     ^~~~
In file included from /usr/include/c++/9/csignal:42,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:43,
                 from teams.cpp:2:
/usr/include/signal.h:127:12: note: previous declaration 'int kill(__pid_t, int)'
  127 | extern int kill (__pid_t __pid, int __sig) __THROW;
      |            ^~~~
teams.cpp: In function 'int can(int, int*)':
teams.cpp:75:14: warning: conversion from 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   75 |  M = val.size();
      |      ~~~~~~~~^~
teams.cpp:77:7: error: assignment of function 'int kill(__pid_t, int)'
   77 |  kill = {{1, {M, 0}}};
      |  ~~~~~^~~~~~~~~~~~~~~
teams.cpp:79:14: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   79 |   while(kill.back().ss.ff < i)
      |              ^~~~
teams.cpp:80:9: error: request for member 'pop_back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   80 |    kill.pop_back();
      |         ^~~~~~~~
teams.cpp:81:14: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   81 |   while(kill.back().ss.ff == i){
      |              ^~~~
teams.cpp:82:22: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   82 |    val[i].ss += kill.back().ss.ss;
      |                      ^~~~
teams.cpp:83:9: error: request for member 'pop_back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   83 |    kill.pop_back();
      |         ^~~~~~~~
teams.cpp:87:25: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   87 |   while((s = query(kill.back().ff, val[br].ff, val[i].ff, val[kill.back().ss.ff].ff - 1)) <= val[i].ss){
      |                         ^~~~
teams.cpp:87:68: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   87 |   while((s = query(kill.back().ff, val[br].ff, val[i].ff, val[kill.back().ss.ff].ff - 1)) <= val[i].ss){
      |                                                                    ^~~~
teams.cpp:89:14: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   89 |    br = kill.back().ss.ff;
      |              ^~~~
teams.cpp:90:22: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   90 |    val[i].ss += kill.back().ss.ss;
      |                      ^~~~
teams.cpp:91:9: error: request for member 'pop_back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   91 |    kill.pop_back();
      |         ^~~~~~~~
teams.cpp:92:12: error: request for member 'empty' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
   92 |    if(kill.empty()){
      |            ^~~~~
teams.cpp:100:29: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
  100 |    if(br + (1 << j) <= kill.back().ss.ff && (s = query(kill.back().ff, val[br].ff, val[i].ff, val[br + (1 << j)].ff - 1)) <= val[i].ss){
      |                             ^~~~
teams.cpp:100:61: error: request for member 'back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
  100 |    if(br + (1 << j) <= kill.back().ss.ff && (s = query(kill.back().ff, val[br].ff, val[i].ff, val[br + (1 << j)].ff - 1)) <= val[i].ss){
      |                                                             ^~~~
teams.cpp:105:8: error: request for member 'push_back' in 'kill', which is of non-class type 'int(__pid_t, int) noexcept' {aka 'int(int, int) noexcept'}
  105 |   kill.push_back({val[i].ff + 1, {br, val[i].ss}});
      |        ^~~~~~~~~